mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2024-11-29 07:58:28 +00:00
6553 lines
267 KiB
Plaintext
6553 lines
267 KiB
Plaintext
GNU Emacs NEWS -- history of user-visible changes. 1992.
|
||
|
||
Copyright (C) 1993-1995, 2001, 2006-2024 Free Software Foundation, Inc.
|
||
See the end of the file for license conditions.
|
||
|
||
|
||
This file is about changes in Emacs versions 19.
|
||
|
||
|
||
|
||
* Emacs 19.34 is a bug-fix release with no user-visible changes.
|
||
|
||
|
||
|
||
* Changes in Emacs 19.33.
|
||
|
||
** Bibtex mode no longer turns on Auto Fill automatically. (No major
|
||
mode should do that--it is the user's choice.)
|
||
|
||
** The variable 'normal-auto-fill-function' specifies the function to
|
||
use for 'auto-fill-function', if and when Auto Fill is turned on.
|
||
Major modes can set this locally to alter how Auto Fill works.
|
||
|
||
|
||
|
||
* Editing Changes in Emacs 19.32
|
||
|
||
** C-x f with no argument now signals an error.
|
||
To set the fill column at the current column, use C-u C-x f.
|
||
|
||
** Expanding dynamic abbrevs with M-/ is now smarter about case
|
||
conversion. If you type the abbreviation with mixed case, and it
|
||
matches the beginning of the expansion including case, then the
|
||
expansion is copied verbatim. Using SPC M-/ to copy an additional
|
||
word always copies it verbatim except when the previous copied word is
|
||
all caps.
|
||
|
||
** On a non-windowing terminal, which can display only one Emacs frame
|
||
at a time, creating a new frame with C-x 5 2 also selects that frame.
|
||
|
||
When using a display that can show multiple frames at once, C-x 5 2
|
||
does make the frame visible, but does not select it. This is the same
|
||
as in previous Emacs versions.
|
||
|
||
** You can use C-x 5 2 to create multiple frames on MSDOS, just as on a
|
||
non-X terminal on Unix. Of course, only one frame is visible at any
|
||
time, since your terminal doesn't have the ability to display multiple
|
||
frames.
|
||
|
||
** On Windows, set win32-pass-alt-to-system to a non-nil value
|
||
if you would like tapping the Alt key to invoke the Windows menu.
|
||
This feature is not enabled by default; since the Alt key is also the
|
||
Meta key, it is too easy and painful to activate this feature by
|
||
accident.
|
||
|
||
** The command 'apply-macro-to-region-lines' repeats the last defined
|
||
keyboard macro once for each complete line within the current region.
|
||
It does this line by line, by moving point to the beginning of that
|
||
line and then executing the macro.
|
||
|
||
This command is not new, but was never documented before.
|
||
|
||
** You can now use Mouse-1 to place the region around a string constant
|
||
(something surrounded by doublequote characters or other delimiter
|
||
characters of like syntax) by double-clicking on one of the delimiting
|
||
characters.
|
||
|
||
** Font Lock mode
|
||
|
||
*** Font Lock support modes
|
||
|
||
Font Lock can be configured to use Fast Lock mode and Lazy Lock mode (see
|
||
below) in a flexible way. Rather than adding the appropriate function to the
|
||
hook font-lock-mode-hook, you can use the new variable 'font-lock-support-mode'
|
||
to control which modes have Fast Lock mode or Lazy Lock mode turned on when
|
||
Font Lock mode is enabled.
|
||
|
||
For example, to use Fast Lock mode when Font Lock mode is turned on, put:
|
||
|
||
(setq font-lock-support-mode 'fast-lock-mode)
|
||
|
||
in your ~/.emacs.
|
||
|
||
*** lazy-lock
|
||
|
||
The lazy-lock package speeds up Font Lock mode by making fontification occur
|
||
only when necessary, such as when a previously unfontified part of the buffer
|
||
becomes visible in a window. When you create a buffer with Font Lock mode and
|
||
Lazy Lock mode turned on, the buffer is not fontified. When certain events
|
||
occur (such as scrolling), Lazy Lock makes sure that the visible parts of the
|
||
buffer are fontified. Lazy Lock also defers on-the-fly fontification until
|
||
Emacs has been idle for a given amount of time.
|
||
|
||
To use this package, put in your ~/.emacs:
|
||
|
||
(setq font-lock-support-mode 'lazy-lock-mode)
|
||
|
||
To control the package behavior, see the documentation for 'lazy-lock-mode'.
|
||
|
||
** Changes in BibTeX mode.
|
||
|
||
*** For all entries allow spaces and tabs between opening brace or
|
||
paren and key.
|
||
|
||
*** Non-escaped double-quoted characters (as in `Sch"of') are now
|
||
supported.
|
||
|
||
** Gnus changes.
|
||
|
||
Gnus, the Emacs news reader, has undergone further rewriting. Many new
|
||
commands and variables have been added. There should be no
|
||
significant incompatibilities between this Gnus version and the
|
||
previously released version, except in the message composition area.
|
||
|
||
Below is a list of the more user-visible changes. Coding changes
|
||
between Gnus 5.1 and 5.2 are more extensive.
|
||
|
||
*** A new message composition mode is used. All old customization
|
||
variables for mail-mode, rnews-reply-mode and gnus-msg are now
|
||
obsolete.
|
||
|
||
*** Gnus is now able to generate "sparse" threads -- threads where
|
||
missing articles are represented by empty nodes.
|
||
|
||
(setq gnus-build-sparse-threads 'some)
|
||
|
||
*** Outgoing articles are stored on a special archive server.
|
||
|
||
To disable this: (setq gnus-message-archive-group nil)
|
||
|
||
*** Partial thread regeneration now happens when articles are
|
||
referred.
|
||
|
||
*** Gnus can make use of GroupLens predictions:
|
||
|
||
(setq gnus-use-grouplens t)
|
||
|
||
*** A trn-line tree buffer can be displayed.
|
||
|
||
(setq gnus-use-trees t)
|
||
|
||
*** An nn-like pick-and-read minor mode is available for the summary
|
||
buffers.
|
||
|
||
(add-hook 'gnus-summary-mode-hook #'gnus-pick-mode)
|
||
|
||
*** In binary groups you can use a special binary minor mode:
|
||
|
||
`M-x gnus-binary-mode'
|
||
|
||
*** Groups can be grouped in a folding topic hierarchy.
|
||
|
||
(add-hook 'gnus-group-mode-hook #'gnus-topic-mode)
|
||
|
||
*** Gnus can re-send and bounce mail.
|
||
|
||
Use the `S D r' and `S D b'.
|
||
|
||
*** Groups can now have a score, and bubbling based on entry frequency
|
||
is possible.
|
||
|
||
(add-hook 'gnus-summary-exit-hook #'gnus-summary-bubble-group)
|
||
|
||
*** Groups can be process-marked, and commands can be performed on
|
||
groups of groups.
|
||
|
||
*** Caching is possible in virtual groups.
|
||
|
||
*** nndoc now understands all kinds of digests, mail boxes, rnews news
|
||
batches, ClariNet briefs collections, and just about everything else.
|
||
|
||
*** Gnus has a new backend (nnsoup) to create/read SOUP packets.
|
||
|
||
*** The Gnus cache is much faster.
|
||
|
||
*** Groups can be sorted according to many criteria.
|
||
|
||
For instance: (setq gnus-group-sort-function #'gnus-group-sort-by-rank)
|
||
|
||
*** New group parameters have been introduced to set list-address and
|
||
expiration times.
|
||
|
||
*** All formatting specs allow specifying faces to be used.
|
||
|
||
*** There are several more commands for setting/removing/acting on
|
||
process marked articles on the `M P' submap.
|
||
|
||
*** The summary buffer can be limited to show parts of the available
|
||
articles based on a wide range of criteria. These commands have been
|
||
bound to keys on the `/' submap.
|
||
|
||
*** Articles can be made persistent -- as an alternative to saving
|
||
articles with the `*' command.
|
||
|
||
*** All functions for hiding article elements are now toggles.
|
||
|
||
*** Article headers can be buttonized.
|
||
|
||
(add-hook 'gnus-article-display-hook #'gnus-article-add-buttons-to-head)
|
||
|
||
*** All mail backends support fetching articles by Message-ID.
|
||
|
||
*** Duplicate mail can now be treated properly. See the
|
||
'nnmail-treat-duplicates' variable.
|
||
|
||
*** All summary mode commands are available directly from the article
|
||
buffer.
|
||
|
||
*** Frames can be part of 'gnus-buffer-configuration'.
|
||
|
||
*** Mail can be re-scanned by a daemonic process.
|
||
|
||
*** Gnus can make use of NoCeM files to filter spam.
|
||
|
||
(setq gnus-use-nocem t)
|
||
|
||
*** Groups can be made permanently visible.
|
||
|
||
(setq gnus-permanently-visible-groups "^nnml:")
|
||
|
||
*** Many new hooks have been introduced to make customizing easier.
|
||
|
||
*** Gnus respects the Mail-Copies-To header.
|
||
|
||
*** Threads can be gathered by looking at the References header.
|
||
|
||
(setq gnus-summary-thread-gathering-function
|
||
'gnus-gather-threads-by-references)
|
||
|
||
*** Read articles can be stored in a special backlog buffer to avoid
|
||
refetching.
|
||
|
||
(setq gnus-keep-backlog 50)
|
||
|
||
*** A clean copy of the current article is always stored in a separate
|
||
buffer to allow easier treatment.
|
||
|
||
*** Gnus can suggest where to save articles. See 'gnus-split-methods'.
|
||
|
||
*** Gnus doesn't have to do as much prompting when saving.
|
||
|
||
(setq gnus-prompt-before-saving t)
|
||
|
||
*** gnus-uu can view decoded files asynchronously while fetching
|
||
articles.
|
||
|
||
(setq gnus-uu-grabbed-file-functions 'gnus-uu-grab-view)
|
||
|
||
*** Filling in the article buffer now works properly on cited text.
|
||
|
||
*** Hiding cited text adds buttons to toggle hiding, and how much
|
||
cited text to hide is now customizable.
|
||
|
||
(setq gnus-cited-lines-visible 2)
|
||
|
||
*** Boring headers can be hidden.
|
||
|
||
(add-hook 'gnus-article-display-hook #'gnus-article-hide-boring-headers)
|
||
|
||
*** Default scoring values can now be set from the menu bar.
|
||
|
||
*** Further syntax checking of outgoing articles have been added.
|
||
|
||
The Gnus manual has been expanded. It explains all these new features
|
||
in greater detail.
|
||
|
||
|
||
* Lisp Changes in Emacs 19.32
|
||
|
||
** The function set-visited-file-name now accepts an optional
|
||
second argument NO-QUERY. If it is non-nil, then the user is not
|
||
asked for confirmation in the case where the specified file already
|
||
exists.
|
||
|
||
** The variable print-length applies to printing vectors and bitvectors,
|
||
as well as lists.
|
||
|
||
** The new function 'keymap-parent' returns the parent keymap
|
||
of a given keymap.
|
||
|
||
** The new function 'set-keymap-parent' specifies a new parent for a
|
||
given keymap. The arguments are KEYMAP and PARENT. PARENT must be a
|
||
keymap or nil.
|
||
|
||
** Sometimes menu keymaps use a command name, a symbol, which is really
|
||
an automatically generated alias for some other command, the "real"
|
||
name. In such a case, you should give that alias symbol a non-nil
|
||
menu-alias property. That property tells the menu system to look for
|
||
equivalent keys for the real name instead of equivalent keys for the
|
||
alias.
|
||
|
||
|
||
|
||
* Editing Changes in Emacs 19.31
|
||
|
||
** Freedom of the press restricted in the United States.
|
||
|
||
Emacs has been censored in accord with the Communications Decency Act.
|
||
This includes removing some features of the doctor program. That law
|
||
was described by its supporters as a ban on pornography, but it bans
|
||
far more than that. The Emacs distribution has never contained any
|
||
pornography, but parts of it were nonetheless prohibited.
|
||
|
||
For information on US government censorship of the Internet, and what
|
||
you can do to bring back freedom of the press, see the web site
|
||
`http://www.vtw.org/'.
|
||
|
||
** A note about C mode indentation customization.
|
||
|
||
The old (Emacs 19.29) ways of specifying a C indentation style
|
||
do not normally work in the new implementation of C mode.
|
||
It has its own methods of customizing indentation, which are
|
||
much more powerful than the old C mode. See the Editing Programs
|
||
chapter of the manual for details.
|
||
|
||
However, you can load the library cc-compat to make the old
|
||
customization variables take effect.
|
||
|
||
** Marking with the mouse.
|
||
|
||
When you mark a region with the mouse, the region now remains
|
||
highlighted until the next input event, regardless of whether you are
|
||
using M-x transient-mark-mode.
|
||
|
||
** Improved Windows NT/95 support.
|
||
|
||
*** Emacs now supports scroll bars on Windows NT and Windows 95.
|
||
|
||
*** Emacs now supports subprocesses on Windows 95. (Subprocesses used
|
||
to work on NT only and not on 95.)
|
||
|
||
*** There are difficulties with subprocesses, though, due to problems
|
||
in Windows, beyond the control of Emacs. They work fine as long as
|
||
you run Windows applications. The problems arise when you run a DOS
|
||
application in a subprocesses. Since current shells run as DOS
|
||
applications, these problems are significant.
|
||
|
||
If you run a DOS application in a subprocess, then the application is
|
||
likely to busy-wait, which means that your machine will be 100% busy.
|
||
However, if you don't mind the temporary heavy load, the subprocess
|
||
will work OK as long as you tell it to terminate before you start any
|
||
other DOS application as a subprocess.
|
||
|
||
Emacs is unable to terminate or interrupt a DOS subprocess.
|
||
You have to do this by providing input directly to the subprocess.
|
||
|
||
If you run two DOS applications at the same time in two separate
|
||
subprocesses, even if one of them is asynchronous, you will probably
|
||
have to reboot your machine--until then, it will remain 100% busy.
|
||
Windows simply does not cope when one Windows process tries to run two
|
||
separate DOS subprocesses. Typing CTL-ALT-DEL and then choosing
|
||
Shutdown seems to work although it may take a few minutes.
|
||
|
||
** M-x resize-minibuffer-mode.
|
||
|
||
This command, not previously mentioned in NEWS, toggles a mode in
|
||
which the minibuffer window expands to show as many lines as the
|
||
minibuffer contains.
|
||
|
||
** 'title' frame parameter and resource.
|
||
|
||
The 'title' X resource now specifies just the frame title, nothing else.
|
||
It does not affect the name used for looking up other X resources.
|
||
It works by setting the new 'title' frame parameter, which likewise
|
||
affects just the displayed title of the frame.
|
||
|
||
The 'name' parameter continues to do what it used to do:
|
||
it specifies the frame name for looking up X resources,
|
||
and also serves as the default for the displayed title
|
||
when the 'title' parameter is unspecified or nil.
|
||
|
||
** Emacs now uses the X toolkit by default, if you have a new
|
||
enough version of X installed (X11R5 or newer).
|
||
|
||
** When you compile Emacs with the Motif widget set, Motif handles the
|
||
F10 key by activating the menu bar. To avoid confusion, the usual
|
||
Emacs binding of F10 is replaced with a no-op when using Motif.
|
||
|
||
If you want to be able to use F10 in Emacs, you can rebind the Motif
|
||
menubar to some other key which you don't use. To do so, add
|
||
something like this to your X resources file. This example rebinds
|
||
the Motif menu bar activation key to S-F12:
|
||
|
||
Emacs*defaultVirtualBindings: osfMenuBar : Shift<Key>F12
|
||
|
||
** In overwrite mode, DEL now inserts spaces in most cases
|
||
to replace the characters it "deletes".
|
||
|
||
** The Rmail summary now shows the number of lines in each message.
|
||
|
||
** Rmail has a new command M-x unforward-rmail-message, which extracts
|
||
a forwarded message from the message that forwarded it. To use it,
|
||
select a message which contains a forwarded message and then type the command.
|
||
It inserts the forwarded message as a separate Rmail message
|
||
immediately after the selected one.
|
||
|
||
This command also undoes the textual modifications that are standardly
|
||
made, as part of forwarding, by Rmail and other mail reader programs.
|
||
|
||
** Turning off saving of .saves-... files in your home directory.
|
||
|
||
Each Emacs session writes a file named .saves-... in your home
|
||
directory to record which files M-x recover-session should recover.
|
||
If you exit Emacs normally with C-x C-c, it deletes that file. If
|
||
Emacs or the operating system crashes, the file remains for M-x
|
||
recover-session.
|
||
|
||
You can turn off the writing of these files by setting
|
||
'auto-save-list-file-name' to nil. If you do this, M-x recover-session
|
||
will not work.
|
||
|
||
Some previous Emacs versions failed to delete these files even on
|
||
normal exit. This is fixed now. If you are thinking of turning off
|
||
this feature because of past experiences with versions that had this
|
||
bug, it would make sense to check whether you still want to do so
|
||
now that the bug is fixed.
|
||
|
||
** Changes to Version Control (VC)
|
||
|
||
There is a new variable, 'vc-follow-symlinks'. It indicates what to do
|
||
when you visit a link to a file that is under version control.
|
||
Editing the file through the link bypasses the version control system,
|
||
which is dangerous and probably not what you want.
|
||
|
||
If this variable is t, VC follows the link and visits the real file,
|
||
telling you about it in the echo area. If it is 'ask' (the default),
|
||
VC asks for confirmation whether it should follow the link. If nil,
|
||
the link is visited and a warning displayed.
|
||
|
||
** iso-acc.el now lets you specify a choice of language.
|
||
Languages include "latin-1" (the default) and "latin-2" (which
|
||
is designed for entering ISO Latin-2 characters).
|
||
|
||
There are also choices for specific human languages such as French and
|
||
Portuguese. These are subsets of Latin-1, which differ in that they
|
||
enable only the accent characters needed for particular language.
|
||
The other accent characters, not needed for the chosen language,
|
||
remain normal.
|
||
|
||
** Posting articles and sending mail now has M-TAB completion on various
|
||
header fields (Newsgroups, To, Cc, ...).
|
||
|
||
Completion in the Newsgroups header depends on the list of groups
|
||
known to your news reader. Completion in the Followup-To header
|
||
offers those groups which are in the Newsgroups header, since
|
||
Followup-To usually just holds one of those.
|
||
|
||
Completion in fields that hold mail addresses works based on the list
|
||
of local users plus your aliases. Additionally, if your site provides
|
||
a mail directory or a specific host to use for any unrecognized user
|
||
name, you can arrange to query that host for completion also. (See the
|
||
documentation of variables 'mail-directory-process' and
|
||
'mail-directory-stream'.)
|
||
|
||
** A greatly extended 'sgml-mode' offers new features such as (to be configured)
|
||
skeletons with completing read for tags and attributes, typing named
|
||
characters including optionally all 8bit characters, making tags invisible
|
||
with optional alternate display text, skipping and deleting tag(pair)s.
|
||
|
||
Note: since Emacs' syntax feature cannot limit the special meaning of ', " and
|
||
- to inside <>, for some texts the result, especially of font locking, may be
|
||
wrong (see 'sgml-specials' if you get wrong results).
|
||
|
||
The derived 'html-mode' configures this with tags and attributes more or
|
||
less HTML3ish. It also offers optional quick keys like C-c 1 for
|
||
headline or C-c u for unordered list (see 'html-quick-keys'). Edit /
|
||
Text Properties / Face or M-g combinations create tags as applicable.
|
||
Outline minor mode is supported and level 1 font-locking tries to
|
||
fontify tag contents (which only works when they fit on one line, due
|
||
to a limitation in font-lock).
|
||
|
||
External viewing via 'browse-url' can occur automatically upon saving.
|
||
|
||
** M-x imenu-add-to-menubar now adds to the menu bar for the current
|
||
buffer only. If you want to put an Imenu item in the menu bar for all
|
||
buffers that use a particular major mode, use the mode hook, as in
|
||
this example:
|
||
|
||
(add-hook 'emacs-lisp-mode-hook
|
||
(lambda () (imenu-add-to-menubar "Index")))
|
||
|
||
** Changes in BibTeX mode.
|
||
|
||
*** Field names may now contain digits, hyphens, and underscores.
|
||
|
||
*** Font Lock mode is now supported.
|
||
|
||
*** bibtex-make-optional-field is no longer interactive.
|
||
|
||
*** If bibtex-maintain-sorted-entries is non-nil, inserting new
|
||
entries is now done with a faster algorithm. However, inserting
|
||
will fail in this case if the buffer contains invalid entries or
|
||
isn't in sorted order, so you should finish each entry with C-c C-c
|
||
(bibtex-close-entry) after you have inserted or modified it.
|
||
The default value of bibtex-maintain-sorted-entries is nil.
|
||
|
||
*** Function 'show-all' is no longer bound to a key, since C-u C-c C-q
|
||
does the same job.
|
||
|
||
*** Entries with quotes inside quote-delimited fields (as `author =
|
||
"Stefan Sch{\"o}f"') are now supported.
|
||
|
||
*** Case in field names doesn't matter anymore when searching for help
|
||
text.
|
||
|
||
** Font Lock mode
|
||
|
||
*** Global Font Lock mode
|
||
|
||
Font Lock mode can be turned on globally, in buffers that support it, by the
|
||
new command global-font-lock-mode. You can use the new variable
|
||
'font-lock-global-modes' to control which modes have Font Lock mode
|
||
automagically turned on. By default, this variable is set so that
|
||
Font Lock mode is turned on globally where the buffer mode supports it.
|
||
|
||
For example, to automagically turn on Font Lock mode where supported, put:
|
||
|
||
(global-font-lock-mode t)
|
||
|
||
in your ~/.emacs.
|
||
|
||
*** Local Refontification
|
||
|
||
In Font Lock mode, editing a line automatically refontifies that line only.
|
||
However, if your change alters the syntactic context for following lines,
|
||
those lines remain incorrectly fontified. To refontify them, use the new
|
||
command M-g M-g ('font-lock-fontify-block').
|
||
|
||
In certain major modes, M-g M-g refontifies the entire current function.
|
||
(The variable 'font-lock-mark-block-function' controls how to find the
|
||
current function.) In other major modes, M-g M-g refontifies 16 lines
|
||
above and below point.
|
||
|
||
With a prefix argument N, M-g M-g refontifies N lines above and below point.
|
||
|
||
** Follow mode
|
||
|
||
'follow-mode' is a new minor mode combining windows showing the same
|
||
buffer into one tall "virtual window". The windows are typically two
|
||
side-by-side windows. Follow mode makes them scroll together as if
|
||
they were a unit. To use it, go to a frame with just one window,
|
||
split it into two side-by-side windows using C-x 3, and then type M-x
|
||
follow-mode.
|
||
|
||
M-x follow-mode turns off Follow mode if it is already enabled.
|
||
|
||
To display two side-by-side windows and activate Follow mode, use the
|
||
command M-x follow-delete-other-windows-and-split.
|
||
|
||
** hide-show changes.
|
||
|
||
The hooks hs-hide-hooks and hs-show-hooks have been renamed
|
||
to hs-hide-hook and hs-show-hook, to follow the convention for
|
||
normal hooks.
|
||
|
||
** Simula mode now has a menu containing the most important commands.
|
||
The new command 'simula-indent-exp' is bound to C-M-q.
|
||
|
||
** etags can now handle programs written in Erlang. Files are
|
||
recognized by the extensions .erl and .hrl. The tagged lines are
|
||
those that begin a function, record, or macro.
|
||
|
||
** MSDOS Changes
|
||
|
||
*** It is now possible to compile Emacs with the version 2 of DJGPP.
|
||
Compilation with DJGPP version 1 also still works.
|
||
|
||
*** The documentation of DOS-specific aspects of Emacs was rewritten
|
||
and expanded; see the ``MS-DOS'' node in the on-line docs.
|
||
|
||
*** Emacs now uses ~ for backup file names, not .bak.
|
||
|
||
*** You can simulate mouse-3 on two-button mice by simultaneously
|
||
pressing both mouse buttons.
|
||
|
||
*** A number of packages and commands which previously failed or had
|
||
restricted functionality on MS-DOS, now work. The most important ones
|
||
are:
|
||
|
||
**** Printing (both with `M-x lpr-buffer' and with 'ps-print' package)
|
||
now works.
|
||
|
||
**** 'Ediff' works (in a single-frame mode).
|
||
|
||
**** `M-x display-time' can be used on MS-DOS (due to the new
|
||
implementation of Emacs timers, see below).
|
||
|
||
**** 'Dired' supports Unix-style shell wildcards.
|
||
|
||
**** The 'c-macro-expand' command now works as on other platforms.
|
||
|
||
**** `M-x recover-session' works.
|
||
|
||
**** `M-x list-colors-display' displays all the available colors.
|
||
|
||
**** The 'TPU-EDT' package works.
|
||
|
||
|
||
* Lisp changes in Emacs 19.31.
|
||
|
||
** The function using-unix-filesystems on Windows NT and Windows 95
|
||
tells Emacs to read and write files assuming that they reside on a
|
||
remote Unix filesystem. No CR/LF translation is done on any files in
|
||
this case. Invoking using-unix-filesystems with t activates this
|
||
behavior, and invoking it with any other value deactivates it.
|
||
|
||
** Change in system-type and system-configuration values.
|
||
|
||
The value of system-type on a Linux-based GNU system is now 'lignux',
|
||
not 'linux'. This means that some programs which use 'system-type'
|
||
need to be changed. The value of 'system-configuration' will also
|
||
be different.
|
||
|
||
It is generally recommended to use 'system-configuration' rather
|
||
than 'system-type'.
|
||
|
||
See <https://www.gnu.org/gnu/linux-and-gnu.html> for more about this.
|
||
|
||
** The functions 'shell-command' and 'dired-call-process'
|
||
now run file name handlers for default-directory, if it has them.
|
||
|
||
** Undoing the deletion of text now restores the positions of markers
|
||
that pointed into or next to the deleted text.
|
||
|
||
** Timers created with run-at-time now work internally to Emacs, and
|
||
no longer use a separate process. Therefore, they now work more
|
||
reliably and can be used for shorter time delays.
|
||
|
||
The new function 'run-with-timer' is a convenient way to set up a timer
|
||
to run a specified amount of time after the present. A call looks
|
||
like this:
|
||
|
||
(run-with-timer SECS REPEAT FUNCTION ARGS...)
|
||
|
||
SECS says how many seconds should elapse before the timer happens.
|
||
It may be an integer or a floating point number. When the timer
|
||
becomes ripe, the action is to call FUNCTION with arguments ARGS.
|
||
|
||
REPEAT gives the interval for repeating the timer (measured in
|
||
seconds). It may be an integer or a floating point number. nil or 0
|
||
means don't repeat at all--call FUNCTION just once.
|
||
|
||
*** with-timeout provides an easy way to do something but give
|
||
up if too much time passes.
|
||
|
||
(with-timeout (SECONDS TIMEOUT-FORMS...) BODY...)
|
||
|
||
This executes BODY, but gives up after SECONDS seconds.
|
||
If it gives up, it runs the TIMEOUT-FORMS and returns the value
|
||
of the last one of them. Normally it returns the value of the last
|
||
form in BODY.
|
||
|
||
*** You can now arrange to call a function whenever Emacs is idle for
|
||
a certain length of time. To do this, call run-with-idle-timer. A
|
||
call looks like this:
|
||
|
||
(run-with-idle-timer SECS REPEAT FUNCTION ARGS...)
|
||
|
||
SECS says how many seconds of idleness should elapse before the timer
|
||
runs. It may be an integer or a floating point number. When the
|
||
timer becomes ripe, the action is to call FUNCTION with arguments
|
||
ARGS.
|
||
|
||
Emacs becomes idle whenever it finishes executing a keyboard or mouse
|
||
command. It remains idle until it receives another keyboard or mouse
|
||
command.
|
||
|
||
REPEAT, if non-nil, means this timer should be activated again each
|
||
time Emacs becomes idle and remains idle for SECS seconds The timer
|
||
does not repeat if Emacs *remains* idle; it runs at most once after
|
||
each time Emacs becomes idle.
|
||
|
||
If REPEAT is nil, the timer runs just once, the first time Emacs is
|
||
idle for SECS seconds.
|
||
|
||
*** post-command-idle-hook is now obsolete; you shouldn't use it at
|
||
all, because it interferes with the idle timer mechanism. If your
|
||
programs use post-command-idle-hook, convert them to use idle timers
|
||
instead.
|
||
|
||
*** y-or-n-p-with-timeout lets you ask a question but give up if
|
||
there is no answer within a certain time.
|
||
|
||
(y-or-n-p-with-timeout PROMPT SECONDS DEFAULT-VALUE)
|
||
|
||
asks the question PROMPT (just like y-or-n-p). If the user answers
|
||
within SECONDS seconds, it returns the answer that the user gave.
|
||
Otherwise it gives up after SECONDS seconds, and returns DEFAULT-VALUE.
|
||
|
||
** Minor change to 'encode-time': you can now pass more than seven
|
||
arguments. If you do that, the first six arguments have the usual
|
||
meaning, the last argument is interpreted as the time zone, and the
|
||
arguments in between are ignored.
|
||
|
||
This means that it works to use the list returned by 'decode-time' as
|
||
the list of arguments for 'encode-time'.
|
||
|
||
** The default value of load-path now includes the directory
|
||
/usr/local/share/emacs/VERSION/site-lisp In addition to
|
||
/usr/local/share/emacs/site-lisp. You can use this new directory for
|
||
site-specific Lisp packages that belong with a particular Emacs
|
||
version.
|
||
|
||
It is not unusual for a Lisp package that works well in one Emacs
|
||
version to cause trouble in another. Sometimes packages need updating
|
||
for incompatible changes; sometimes they look at internal data that
|
||
has changed; sometimes the package has been installed in Emacs itself
|
||
and the installed version should be used. Whatever the reason for the
|
||
problem, this new feature makes it easier to solve.
|
||
|
||
** When your program contains a fixed file name (like .completions or
|
||
.abbrev.defs), the file name usually needs to be different on operating
|
||
systems with limited file name syntax.
|
||
|
||
Now you can avoid ad-hoc conditionals by using the function
|
||
convert-standard-filename to convert the file name to a proper form
|
||
for each operating system. Here is an example of use, from the file
|
||
completions.el:
|
||
|
||
(defvar save-completions-file-name
|
||
(convert-standard-filename "~/.completions")
|
||
"*The filename to save completions to.")
|
||
|
||
This sets the variable save-completions-file-name to a value that
|
||
depends on the operating system, because the definition of
|
||
convert-standard-filename depends on the operating system. On
|
||
Unix-like systems, it returns the specified file name unchanged. On
|
||
MS-DOS, it adapts the name to fit the limitations of that system.
|
||
|
||
** The interactive spec N now returns the numeric prefix argument
|
||
rather than the raw prefix argument. (It still reads a number using the
|
||
minibuffer if there is no prefix argument at all.)
|
||
|
||
** When a process is deleted, this no longer disconnects the process
|
||
marker from its buffer position.
|
||
|
||
** The variable 'garbage-collection-messages' now controls whether
|
||
Emacs displays a message at the beginning and end of garbage collection.
|
||
The default is nil, meaning there are no messages.
|
||
|
||
** The variable 'debug-ignored-errors' specifies certain kinds of errors
|
||
that should not enter the debugger. Its value is a list of error
|
||
condition symbols and/or regular expressions. If the error has any
|
||
of the condition symbols listed, or if any of the regular expressions
|
||
matches the error message, then that error does not enter the debugger,
|
||
regardless of the value of debug-on-error.
|
||
|
||
This variable is initialized to match certain common but uninteresting
|
||
errors that happen often during editing.
|
||
|
||
** The new function 'error-message-string' converts an error datum
|
||
into its error message. The error datum is what condition-case
|
||
puts into the variable, to describe the error that happened.
|
||
|
||
** Anything that changes which buffer appears in a given window
|
||
now runs the window-scroll-functions for that window.
|
||
|
||
** The new function 'get-buffer-window-list' returns a list of windows
|
||
displaying a buffer. The function is called with the buffer (a buffer
|
||
object or a buffer name) and two optional arguments specifying the
|
||
minibuffer windows and frames to search.
|
||
Therefore this function takes optional args like 'next-window' etc.,
|
||
and not 'get-buffer-window'.
|
||
|
||
** 'buffer-substring' now runs the hook 'buffer-access-fontify-functions',
|
||
calling each function with two arguments--the range of the buffer
|
||
being accessed. 'buffer-substring-no-properties' does not call them.
|
||
|
||
If you use this feature, you should set the variable
|
||
'buffer-access-fontified-property' to a non-nil symbol, which is a
|
||
property name. Then, if all the characters in the buffer range have a
|
||
non-nil value for that property, the 'buffer-access-fontify-functions'
|
||
are not called. When called, these functions should put a non-nil
|
||
property on the text that they fontify, so that they won't get called
|
||
over and over for the same text.
|
||
|
||
** Changes in lisp-mnt.el
|
||
|
||
*** The lisp-mnt package can now recognize file headers that are written
|
||
in the formats used by the 'what' command and the RCS 'ident' command:
|
||
|
||
;; @(#) HEADER: text
|
||
;; $HEADER: text $
|
||
|
||
in addition to the normal
|
||
|
||
;; HEADER: text
|
||
|
||
*** The commands lm-verify and lm-synopsis are now interactive. lm-verify
|
||
checks that the library file has proper sections and headers, and
|
||
lm-synopsis extracts first line "synopsis'"information.
|
||
|
||
|
||
|
||
* Editing Changes in Emacs 19.30.
|
||
|
||
** Be sure to recompile your byte-compiled Emacs Lisp files
|
||
if you last compiled them with Emacs 19.28 or earlier.
|
||
You can use M-x byte-force-recompile to recompile all the .elc files
|
||
in a specified directory.
|
||
|
||
** Emacs now provides multiple-frame support on Windows NT
|
||
and Windows 95.
|
||
|
||
** M-x column-number-mode toggles a minor mode which displays
|
||
the current column number in the mode line.
|
||
|
||
** Line Number mode is now enabled by default.
|
||
|
||
** M-x what-line now displays the line number in the accessible
|
||
portion of the buffer as well as the line number in the full buffer,
|
||
when narrowing is in effect.
|
||
|
||
** If you type a M-x command that has an equivalent key binding,
|
||
the equivalent is shown in the minibuffer before the command executes.
|
||
This feature is enabled by default for the sake of beginning users.
|
||
You can turn the feature off by setting 'suggest-key-bindings' to nil.
|
||
|
||
** The menu bar is now visible on text-only terminals. To choose a
|
||
command from the menu bar when you have no mouse, type M-`
|
||
(Meta-Backquote) or F10. To turn off menu bar display, do:
|
||
|
||
(menu-bar-mode -1).
|
||
|
||
** Whenever you invoke a minibuffer, it appears in the minibuffer
|
||
window that the current frame uses.
|
||
|
||
Emacs can only use one minibuffer window at a time. If you activate
|
||
the minibuffer while a minibuffer window is active in some other
|
||
frame, the outer minibuffer window disappears while the inner one is
|
||
active.
|
||
|
||
** Echo area messages always appear in the minibuffer window that the
|
||
current frame uses. If a minibuffer is active in some other frame,
|
||
the echo area message does not hide it even temporarily.
|
||
|
||
** The minibuffer now has a menu-bar menu. You can use it to exit or
|
||
abort the minibuffer, or to ask for completion.
|
||
|
||
** Dead-key and composite character processing is done in the standard
|
||
X11R6 manner (through the default "input method" using the
|
||
/usr/lib/X11/locale/*/Compose databases of key combinations). I.e. if
|
||
it works in xterm, it should also work in emacs now.
|
||
|
||
** Mouse changes
|
||
|
||
*** You can now use the mouse when running Emacs in an xterm.
|
||
Use M-x xterm-mouse-mode to let emacs take control over the mouse.
|
||
|
||
*** C-mouse-1 now once again provides a menu of buffers to select.
|
||
S-mouse-1 is now the way to select a default font for the frame.
|
||
|
||
*** There is a new 'mouse-scroll-min-lines' variable to control the
|
||
minimum number of lines scrolled by dragging the mouse outside a
|
||
window's edge.
|
||
|
||
*** Dragging mouse-1 on a vertical line that separates windows
|
||
now moves the line, thus changing the widths of the two windows.
|
||
(This feature is available only if you don't have vertical scroll bars.
|
||
If you do use them, a scroll bar separates two side-by-side windows.)
|
||
|
||
*** Double-click mouse-1 on a character with "symbol" syntax (such as
|
||
underscore, in C mode) selects the entire symbol surrounding that
|
||
character. (Double-click mouse-1 on a letter selects a whole word.)
|
||
|
||
** When incremental search wraps around to the beginning (or end) of
|
||
the buffer, if you keep on searching until you go past the original
|
||
starting point of the search, the echo area changes from "Wrapped" to
|
||
"Overwrapped". That tells you that you are revisiting matches that
|
||
you have already seen.
|
||
|
||
** Filling changes.
|
||
|
||
*** If the variable 'colon-double-space' is non-nil, the explicit fill
|
||
commands put two spaces after a colon.
|
||
|
||
*** Auto-Fill mode now supports Adaptive Fill mode just as the
|
||
explicit fill commands do. The variable 'adaptive-fill-regexp'
|
||
specifies a regular expression to match text at the beginning of
|
||
a line that should be the fill prefix.
|
||
|
||
*** Adaptive Fill mode can take a fill prefix from the first line of a
|
||
paragraph, *provided* that line is not a paragraph-starter line.
|
||
|
||
Paragraph-starter lines are indented lines that start a new
|
||
paragraph because they are indented. This indentation shouldn't
|
||
be copied to additional lines.
|
||
|
||
Whether indented lines are paragraph lines depends on the value of the
|
||
variable 'paragraph-start'. Some major modes set this; you can set it
|
||
by hand or in mode hooks as well. For editing text in which paragraph
|
||
first lines are not indented, and which contains paragraphs in which
|
||
all lines are indented, you should use Indented Text mode or arrange
|
||
for paragraph-start not to match these lines.
|
||
|
||
*** You can specify more complex ways of choosing a fill prefix
|
||
automatically by setting 'adaptive-fill-function'. This function
|
||
is called with point after the left margin of a line, and it should
|
||
return the appropriate fill prefix based on that line.
|
||
If it returns nil, that means it sees no fill prefix in that line.
|
||
|
||
** Gnus changes.
|
||
|
||
Gnus, the Emacs news reader, has been rewritten and expanded. Most
|
||
things that worked with the old version should still work with the new
|
||
version. Code that relies heavily on Gnus internals is likely to
|
||
fail, though.
|
||
|
||
*** Incompatibilities with the old GNUS.
|
||
|
||
**** All interactive commands have kept their names, but many internal
|
||
functions have changed names.
|
||
|
||
**** The summary mode gnus-uu commands have been moved from the `C-c
|
||
C-v' keymap to the 'X' keymap.
|
||
|
||
**** There can now be several summary buffers active at once.
|
||
Variables that are relevant to each summary buffer are buffer-local to
|
||
that buffer.
|
||
|
||
**** Old hilit code doesn't work at all. Gnus performs its own
|
||
highlighting based not only on what's visible in the buffer, but on
|
||
other data structures.
|
||
|
||
**** Old packages like 'expire-kill' will no longer work.
|
||
|
||
**** `C-c C-l' in the group buffer no longer switches to a different
|
||
buffer, but instead lists killed groups in the group buffer.
|
||
|
||
*** New features.
|
||
|
||
**** The look of all buffers can be changed by setting format-like
|
||
variables.
|
||
|
||
**** Local spool and several NNTP servers can be used at once.
|
||
|
||
**** Groups can be combined into virtual groups.
|
||
|
||
**** Different mail formats can be read much the same way as one would
|
||
read newsgroups. All the mail backends implement mail expiry schemes.
|
||
|
||
**** Gnus can use various strategies for gathering threads that have
|
||
lost their roots (thereby gathering loose sub-threads into one thread)
|
||
or it can go back and retrieve enough headers to build a complete
|
||
thread.
|
||
|
||
**** Killed groups can be read.
|
||
|
||
**** Gnus can do partial group updates - you do not have to retrieve
|
||
the entire active file just to check for new articles in a few groups.
|
||
|
||
**** Gnus implements a sliding scale of subscribedness to groups.
|
||
|
||
**** You can score articles according to any number of criteria. You
|
||
can get Gnus to score articles for you using adaptive scoring.
|
||
|
||
**** Gnus maintains a dribble buffer that is auto-saved the normal
|
||
Emacs manner, so it should be difficult to lose much data on what you
|
||
have read if your machine should go down.
|
||
|
||
**** Gnus now has its own startup file (`.gnus.el') to avoid
|
||
cluttering up the `.emacs' file.
|
||
|
||
**** You can set the process mark on both groups and articles and
|
||
perform operations on all the marked items.
|
||
|
||
**** You can grep through a subset of groups and create a group from
|
||
the results.
|
||
|
||
**** You can list subsets of groups using matches on group names or
|
||
group descriptions.
|
||
|
||
**** You can browse foreign servers and subscribe to groups from those
|
||
servers.
|
||
|
||
**** Gnus can pre-fetch articles asynchronously on a second connection
|
||
to the servers.
|
||
|
||
**** You can cache articles locally.
|
||
|
||
**** Gnus can fetch FAQs to and descriptions of groups.
|
||
|
||
**** Digests (and other files) can be used as the basis for groups.
|
||
|
||
**** Articles can be highlighted and customized.
|
||
|
||
** Changes to Version Control (VC)
|
||
|
||
*** General changes (all backends).
|
||
|
||
VC directory listings (C-x v d) are now kept up to date when you do a
|
||
vc-next-action (C-x v v) on the marked files. The 'g' command updates
|
||
the buffer properly. '=' in a VC dired buffer produces a version
|
||
control diff, not an ordinary diff.
|
||
|
||
*** CVS changes.
|
||
|
||
Under CVS, you no longer need to type C-x C-q before you can edit a
|
||
file. VC doesn't write-protect unmodified buffers anymore; you can
|
||
freely change them at any time. The mode line keeps track of the
|
||
file status.
|
||
|
||
If you do want unmodified files to be write-protected, set your
|
||
CVSREAD environment variable. VC sees this and behaves accordingly;
|
||
that will give you the behavior of Emacs 19.29, similar to that under
|
||
RCS and SCCS. In this mode, if the variable vc-mistrust-permissions
|
||
is nil, VC learns the modification state from the file permissions.
|
||
When setting CVSREAD for the first time, you should check out the
|
||
whole module anew, so that the file permissions are set correctly.
|
||
|
||
VC also works with remote repositories now. When you visit a file, it
|
||
doesn't run "cvs status" anymore, so there shouldn't be any long delays.
|
||
|
||
Directory listings under VC/CVS have been enhanced. Type C-x v d, and
|
||
you get a list of all files in or below the current directory that are
|
||
not up-to-date. The actual status (modified, merge, conflict, ...) is
|
||
displayed for each file. If you give a prefix argument (C-u C-x v d),
|
||
up-to-date files are also listed. You can mark any number of files,
|
||
and execute the next logical version control command on them (C-x v v).
|
||
|
||
*** Starting a new branch.
|
||
|
||
If you try to lock a version that is not the latest on its branch,
|
||
VC asks for confirmation in the minibuffer. If you say no, it offers
|
||
to lock the latest version instead.
|
||
|
||
*** RCS non-strict locking.
|
||
|
||
VC can now handle RCS non-strict locking, too. In this mode, working
|
||
files are always writable and you needn't lock the file before making
|
||
changes, similar to the default mode under CVS. To enable non-strict
|
||
locking for a file, use the "rcs -U" command.
|
||
|
||
*** Sharing RCS master files.
|
||
|
||
If you share RCS subdirs with other users (through symbolic links),
|
||
and you always want to work on the latest version, set
|
||
vc-consult-headers to nil and vc-mistrust-permissions to 't'.
|
||
Then you see the state of the *latest* version on the mode line, not
|
||
that of your working file. When you do a check out, VC overwrites
|
||
your working file with the latest version from the master.
|
||
|
||
*** RCS customization.
|
||
|
||
There is a new variable 'vc-consult-headers'. If it is t (the default),
|
||
VC searches for RCS headers in working files (like `$Id$') and
|
||
determines the state of the file from them, not from the master file.
|
||
This is fast and more reliable when you use branches. (The variable
|
||
was already present in Emacs 19.29, but didn't get mentioned in the
|
||
NEWS.)
|
||
|
||
** Calendar changes.
|
||
|
||
*** New calendars supported: Chinese, Coptic, Ethiopic
|
||
|
||
Here are the commands for converting to and from these calendars:
|
||
|
||
gC: calendar-goto-chinese-date
|
||
gk: calendar-goto-coptic-date
|
||
ge: calendar-goto-ethiopic-date
|
||
|
||
pC: calendar-print-chinese-date
|
||
pk: calendar-print-coptic-date
|
||
pe: calendar-print-ethiopic-date
|
||
|
||
*** Printed calendars
|
||
|
||
Calendar mode now has commands to produce fancy printed calendars via
|
||
LaTeX. You can ask for a calendar for one or more days, weeks, months
|
||
or years. The commands all start with 't'; see the manual for a list
|
||
of them.
|
||
|
||
*** New sexp diary entry type
|
||
|
||
Reminders that apply in the days leading up to an event.
|
||
|
||
** The CC-mode package now provides the default C and C++ modes.
|
||
See the manual for documentation of its features.
|
||
|
||
** The uniquify package chooses buffer names differently when you
|
||
visit multiple files with the same name (in different directories).
|
||
|
||
** RMAIL now always uses the movemail program when it renames an
|
||
inbox file, so that it can interlock properly with the mailer
|
||
no matter where it is delivering mail.
|
||
|
||
** tex-start-of-header and tex-end-of-header are now regular expressions,
|
||
not strings.
|
||
|
||
** To enable automatic uncompression of compressed files,
|
||
type M-x auto-compression-mode. (This command used to be called
|
||
toggle-auto-compression, but was not documented before.) In Lisp,
|
||
you can do
|
||
|
||
(auto-compression-mode 1)
|
||
|
||
to turn the mode on.
|
||
|
||
** The new 'pc-select' package emulates the key bindings for cutting and
|
||
pasting, and selection of regions, found in Windows, Motif, and the
|
||
Macintosh.
|
||
|
||
** Help buffers now use a special major mode, 'help-mode'. This mode
|
||
normally turns on View mode; it also provides a hook, 'help-mode-hook',
|
||
which you can use for other customization.
|
||
|
||
** Apropos now uses faces for enhanced legibility. It now describes
|
||
symbol properties as well as their function definitions and variable
|
||
values. You can use Mouse-2 or RET to get more information about a
|
||
function definition, variable, or property.
|
||
|
||
** Font Lock mode
|
||
|
||
*** Supports Scheme, Tcl and Help modes
|
||
|
||
For example, to automatically turn on Font Lock mode in the *Help*
|
||
buffer, put:
|
||
|
||
(add-hook 'help-mode-hook #'turn-on-font-lock)
|
||
|
||
in your ~/.emacs.
|
||
|
||
*** Enhanced fontification
|
||
|
||
The structure of font-lock-keywords is extended to allow "anchored" keywords.
|
||
Typically, a keyword item of font-lock-keywords comprises a regexp to search
|
||
for and information to specify how the regexp should be highlighted. However,
|
||
the highlighting information is extended so that it can be another keyword
|
||
item. This keyword item, its regexp and highlighting information, is processed
|
||
before resuming with the keyword item of which it is part.
|
||
|
||
For example, a typical keyword item might be:
|
||
|
||
("\\<anchor\\>" (0 anchor-face))
|
||
|
||
which fontifies each occurrence of the discrete word "anchor" in the value of
|
||
the variable anchor-face. However, the highlighting information can be used to
|
||
fontify text that is anchored to the word "anchor". For example:
|
||
|
||
("\\<anchor\\>" (0 anchor-face) ("\\=[ ,]*\\(item\\)" nil nil (1 item-face)))
|
||
|
||
which fontifies each occurrence of "anchor" as above, but for each occurrence
|
||
of "anchor", each occurrence of "item", in any following comma separated list,
|
||
is fontified in the value of the variable item-face. Thus the "item" text is
|
||
anchored to the "anchor" text. See the variable documentation for further
|
||
information.
|
||
|
||
This feature is used to extend the level and quality of fontification in a
|
||
number of modes. For example, C/C++ modes now have level 3 decoration that
|
||
includes the fontification of variable and function names in declaration lists.
|
||
In this instance, the "anchor" described in the above example is a type or
|
||
class name, and an "item" is a variable or function name.
|
||
|
||
*** Fontification levels
|
||
|
||
The variables font-lock-maximum-decoration and font-lock-maximum-size are
|
||
extended to specify levels and sizes for specific modes. The variable
|
||
font-lock-maximum-decoration specifies the preferred level of fontification for
|
||
modes that provide multiple levels (typically from "subdued" to "gaudy"). The
|
||
variable font-lock-maximum-size specifies the buffer size for which buffer
|
||
fontification is suppressed when Font Lock mode is turned on (typically because
|
||
it would take too long).
|
||
|
||
These variables can now specify values for individual modes, by supplying
|
||
lists of mode names and values. For example, to use the above mentioned level
|
||
3 decoration for buffers in C/C++ modes, and default decoration otherwise, put:
|
||
|
||
(setq font-lock-maximum-decoration '((c-mode . 3) (c++-mode . 3)))
|
||
|
||
in your ~/.emacs. Maximum buffer size values for individual modes are
|
||
specified in the same way with the variable font-lock-maximum-size.
|
||
|
||
*** Font Lock configuration
|
||
|
||
The mechanism to provide default settings for Font Lock mode are the variables
|
||
'font-lock-defaults' and 'font-lock-maximum-decoration'. Typically, you should
|
||
only need to change the value of font-lock-maximum-decoration. However, to
|
||
support Font Lock mode for buffers in modes that currently do not support Font
|
||
Lock mode, you should set a buffer local value of font-lock-defaults for that
|
||
mode, typically via its mode hook.
|
||
|
||
These variables are used by Font Lock mode to set the values of the variables
|
||
'font-lock-keywords', 'font-lock-keywords-only', 'font-lock-syntax-table',
|
||
'font-lock-beginning-of-syntax-function'
|
||
and 'font-lock-keywords-case-fold-search'.
|
||
|
||
You need not set these variables directly, and should not set them yourself
|
||
since the underlining mechanism may change in future.
|
||
|
||
** Archive mode is now the default mode for various sorts of
|
||
archive files (files whose names end with .arc, .lzh, .zip, and .zoo).
|
||
|
||
** You can automatically update the years in copyright notice by
|
||
means of
|
||
|
||
(add-hook 'write-file-hooks #'copyright-update).
|
||
|
||
Optionally it can update the GPL version as well.
|
||
|
||
** Scripts of various languages (Shell, AWK, Perl, makefiles ...) can
|
||
be automatically provided with a magic number and be made executable
|
||
by their respective modes under control of various user variables.
|
||
The mode must call 'executable-set-magic', such as
|
||
(executable-set-magic "make" "-f"). The latter for example has no
|
||
effect on [Mm]akefile.
|
||
|
||
** Shell script mode now supports over 15 different shells. The new
|
||
command C-c ! executes the region, and optionally beginning of script
|
||
as well, by passing them to the shell.
|
||
|
||
Cases such as 'sh' being a 'bash' are now accounted for.
|
||
Fontification now also does variables, the magic number and all
|
||
builtin commands. Shell script mode no longer mingles 'tab-width' and
|
||
indentation style. The variable 'sh-tab-width' has been renamed to
|
||
'sh-indentation'. Empty lines are now indented like previous
|
||
non-empty line, rather than just previous line.
|
||
|
||
The annoying $ variable prompting has been eliminated. Instead, shell
|
||
script mode uses 'comint-dynamic-completion' for commands, variables
|
||
and filenames.
|
||
|
||
** Two-column mode now automatically scrolls both buffers together,
|
||
which makes it possible to eliminate the special scrolling commands
|
||
that used to do so.
|
||
|
||
The commands that operate in two-column mode are no longer bound to
|
||
keys outside that mode. f2 o will now position at the same point in
|
||
associated buffer.
|
||
|
||
the new command f2 RET inserts a newline in both buffers, at point and
|
||
at the corresponding position in the associated buffer.
|
||
|
||
** Skeleton commands now work smoothly as abbrev definitions. The
|
||
element < no longer exists, ' is a new element.
|
||
|
||
** The autoinsert insert facility for prefilling empty files as soon
|
||
as they are found has been extended to accommodate skeletons or calling
|
||
functions. See the function 'auto-insert'.
|
||
|
||
** TPU-edt Changes
|
||
|
||
Loading tpu-edt no longer turns on tpu-edt mode. In fact, it is no
|
||
longer necessary to explicitly load tpu-edt. All you need to do to
|
||
turn on tpu-edt is run the tpu-edt function. Here's how to run
|
||
tpu-edt instead of loading the file:
|
||
|
||
Running Emacs: Type emacs -f tpu-edt
|
||
not emacs -l tpu-edt
|
||
|
||
Within Emacs: Type M-x tpu-edt <ret>
|
||
not M-x load-library <ret> tpu-edt <ret>
|
||
|
||
In .emacs: Use (tpu-edt)
|
||
not (load "tpu-edt")
|
||
|
||
The default name of the tpu-edt X key definition file has changed from
|
||
~/.tpu-gnu-keys to ~/.tpu-keys. If you don't rename the file yourself,
|
||
tpu-edt will offer to rename it the first time you invoke it under
|
||
x-windows.
|
||
|
||
** MS-DOS Enhancements:
|
||
|
||
*** Better mouse control by adding the following functions [in dosfns.c]
|
||
msdos-mouse-enable, msdos-mouse-disable, msdos-mouse-init.
|
||
|
||
*** If another foreground/background color than the default is setup in
|
||
your ~/_emacs, then the screen briefly flickers with the default
|
||
colors before changing to the colors you have specified. To avoid
|
||
this, the EMACSCOLORS environment variable exists. It shall be
|
||
defined as a string with the following elements:
|
||
|
||
set EMACSCOLORS=fb;fb
|
||
|
||
The first set of "fb" defines the initial foreground and background
|
||
colors using standard dos color numbers (0=black,.., 7=white).
|
||
If specified, the second set of "fb" defines the colors which are
|
||
restored when you leave emacs.
|
||
|
||
*** The new SUSPEND environment variable can now be set as the shell to
|
||
use when suspending emacs. This can be used to override the stupid
|
||
limitation on the environment of sub-shells in MS-DOS (they are just
|
||
large enough to hold the currently defined variables, not leaving
|
||
room for more); to overcome this limitation, add this to autoexec.bat:
|
||
|
||
set SUSPEND=%COMSPEC% /E:2000
|
||
|
||
** The escape character can now be displayed on X frames. Try
|
||
this:
|
||
(aset standard-display-table 27 (vector 27))
|
||
after first creating a display table (you can do that by loading
|
||
the disp-table library).
|
||
|
||
** The new command-line option --eval specifies an expression to evaluate
|
||
from the command line.
|
||
|
||
** etags has now the ability to tag Perl files. They are recognized
|
||
either by the .pm and .pl suffixes or by a first line which starts
|
||
with `#!' and specifies a Perl interpreter. The tagged lines are
|
||
those beginning with the 'sub' keyword.
|
||
|
||
New suffixes recognized are .hpp for C++; .f90 for Fortran; .bib,
|
||
.ltx, .TeX for TeX (.bbl, .dtx removed); .ml for Lisp; .prolog for
|
||
prolog (.pl is now Perl).
|
||
|
||
** The files etc/termcap.dat and etc/termcap.ucb have been replaced
|
||
with a new, merged, and much more comprehensive termcap file. The
|
||
new file should include all the special entries from the old one.
|
||
This new file is under active development as part of the ncurses
|
||
project. If you have any questions about this file, or problems with
|
||
an entry in it, email terminfo@ccil.org.
|
||
|
||
|
||
* Lisp changes in Emacs 19.30.
|
||
|
||
** New Data Types
|
||
|
||
*** There is a new data type called a char-table which is an array
|
||
indexed by a character. Currently this is mostly equivalent to a
|
||
vector of length 256, but in the future, when a wider character set is
|
||
in use, it will be different. To create one, call
|
||
(make-char-table SUBTYPE INITIAL-VALUE)
|
||
|
||
SUBTYPE is a symbol that identifies the specific use of this
|
||
character table. It can be any of these values:
|
||
|
||
syntax-table
|
||
display-table
|
||
keyboard-translate-table
|
||
case-table
|
||
|
||
The function 'char-table-subtype' returns the subtype of a char-table.
|
||
You cannot alter the subtype of an existing char-table.
|
||
|
||
A char-table has an element for each character code. It also has some
|
||
"extra slots". The number of extra slots depends on the subtype and
|
||
their use depends on the subtype. (Each subtype symbol has a
|
||
'char-table-extra-slots' property that says how many extra slots to
|
||
make.) Use 'char-table-extra-slot' to access extra slots and
|
||
'set-char-table-extra-slot' to store a value in a slot.
|
||
|
||
A char-table T can have a parent, which should be another char-table
|
||
P. If you look for the value in T for character C, and the table T
|
||
actually holds nil, P's element for character C is used instead.
|
||
The functions 'char-table-parent' and 'set-char-table-parent'
|
||
let you read or set the parent of a char-table.
|
||
|
||
To scan all the values in a char-table, do not try to loop through all
|
||
possible character codes. That would work for now, but will not work
|
||
in the future. Instead, call 'map-char-table'. (map-char-table
|
||
FUNCTION TABLE) calls FUNCTION once for each character or character
|
||
set that has a distinct value in TABLE. FUNCTION gets two arguments,
|
||
RANGE and VALUE. RANGE specifies a range of TABLE that has one
|
||
uniform value, and VALUE is the value in TABLE for that range.
|
||
|
||
Currently, RANGE is always a vector containing a single character
|
||
and it refers to that character alone. In the future, other kinds
|
||
of ranges will occur. You can set the value for a given range
|
||
with 'set-char-table-range' and examine the value
|
||
for a range with 'char-table-range'.
|
||
|
||
*** Syntax tables are now represented as char-tables.
|
||
All syntax tables other than the standard syntax table
|
||
normally have the standard syntax table as their parent.
|
||
Their subtype is 'syntax-table'.
|
||
|
||
*** Display tables are now represented as char-tables.
|
||
Their subtype is 'display-table'.
|
||
|
||
*** Case tables are now represented as char-tables.
|
||
Their subtype is 'case-table'.
|
||
|
||
*** The value of keyboard-translate-table may now be a char-table
|
||
instead of a string. Normally the char-tables used for this purpose
|
||
have the subtype 'keyboard-translate-table', but that is not required.
|
||
|
||
*** A new data type called a bool-vector is a vector of values
|
||
that are either t or nil. To create one, do
|
||
(make-bool-vector LENGTH INITIAL-VALUE)
|
||
|
||
** You can now specify, for each marker, how it should relocate when
|
||
text is inserted at the place where the marker points. This is called
|
||
the "insertion type" of the marker.
|
||
|
||
To set the insertion type, use 'set-marker-insertion-type'.
|
||
If TYPE is t, it means the marker advances when text is inserted. If
|
||
TYPE is nil, it means the marker does not advance. (In Emacs 19.29,
|
||
markers did not advance.)
|
||
|
||
The function 'marker-insertion-type' reports the insertion type of a
|
||
given marker. The function 'copy-marker' takes a second argument TYPE
|
||
which specifies the insertion type of the new copied marker.
|
||
|
||
** When you create an overlay, you can specify the insertion type of
|
||
the beginning and of the end. To do this, you can use two new
|
||
arguments to 'make-overlay': front-advance and rear-advance.
|
||
|
||
** The new function 'overlays-in' returns a list of the overlays that
|
||
overlap a specified range of the buffer. The returned list includes
|
||
empty overlays at the beginning of this range, as well as within the
|
||
range.
|
||
|
||
** The new hook 'window-scroll-functions' is run when a window has been
|
||
scrolled. The functions in this list are called just before
|
||
redisplay, after the new window-start has been computed. Each function
|
||
is called with two arguments--the window that has been scrolled, and its
|
||
new window-start position.
|
||
|
||
This hook is useful for on-the-fly fontification and other features
|
||
that affect how the redisplayed text will look when it is displayed.
|
||
|
||
The 'window-end' value of the window is not valid when these functions
|
||
are called. The computation of window-end is byproduct of actual
|
||
redisplay of the window contents, which means it has not yet happened
|
||
when the hook is run. Computing window-end specially in advance for
|
||
the sake of these functions would cause a slowdown.
|
||
|
||
The hook functions can determine where the text on the window will end
|
||
by calling vertical-motion starting with the window-start position.
|
||
|
||
** The new hook 'redisplay-end-trigger-functions' is run whenever
|
||
redisplay in window uses text that extends past a specified end
|
||
trigger position. You set the end trigger position with the function
|
||
'set-window-redisplay-end-trigger'. The functions are called with two
|
||
arguments: the window, and the end trigger position. Storing nil for
|
||
the end trigger position turns off the feature, and the trigger value
|
||
is automatically reset to nil just after the hook is run.
|
||
|
||
You can use the function 'window-redisplay-end-trigger' to read a
|
||
window's current end trigger value.
|
||
|
||
** The new function 'insert-file-contents-literally' inserts the
|
||
contents of a file without any character set translation or decoding.
|
||
|
||
** The new function 'safe-length' computes the length of a list.
|
||
It never gets an error--it treats any non-list like nil.
|
||
If given a circular list, it returns an upper bound for the number
|
||
of elements before the circularity.
|
||
|
||
** replace-match now takes a fifth argument, SUBEXP. If SUBEXP is
|
||
non-nil, that says to replace just subexpression number SUBEXP of the
|
||
regexp that was matched, not the entire match. For example, after
|
||
matching `foo \(ba*r\)' calling replace-match with 1 as SUBEXP means
|
||
to replace just the text that matched `\(ba*r\)'.
|
||
|
||
** The new keymap 'special-event-map' defines bindings for certain
|
||
events that should be handled at a very low level--as soon as they
|
||
are read. The 'read-event' function processes these events itself,
|
||
and never returns them.
|
||
|
||
Events that are handled in this way do not echo, they are never
|
||
grouped into key sequences, and they never appear in the value of
|
||
'last-command-event' or (this-command-keys). They do not discard a
|
||
numeric argument, they cannot be unread with 'unread-command-events',
|
||
they may not appear in a keyboard macro, and they are not recorded
|
||
in a keyboard macro while you are defining one.
|
||
|
||
These events do, however, appear in 'last-input-event' immediately after
|
||
they are read, and this is the way for the event's definition to find
|
||
the actual event.
|
||
|
||
The events types iconify-frame, make-frame-visible and delete-frame
|
||
are normally handled in this way.
|
||
|
||
** encode-time now supports simple date arithmetic by means of
|
||
out-of-range values for its SEC, MINUTE, HOUR, DAY, and MONTH
|
||
arguments; for example, day 0 means the day preceding the given month.
|
||
Also, the ZONE argument can now be a TZ-style string.
|
||
|
||
** 'command-execute' and 'call-interactively' now accept an optional third
|
||
argument KEYS. If specified and non-nil, this specifies the key
|
||
sequence containing the events that were used to invoke the command.
|
||
|
||
** The environment variable NAME, if set, now specifies the value of
|
||
(user-full-name), when Emacs starts up.
|
||
|
||
|
||
|
||
* User Editing Changes in Emacs 19.29
|
||
|
||
** If you run out of memory.
|
||
|
||
If you get the error message "Virtual memory exhausted", type C-x s.
|
||
That way of saving files has the least additional memory needs. Emacs
|
||
19.29 keeps a reserve of memory which it makes available when this
|
||
error happens; that is to ensure that C-x s can complete its work.
|
||
|
||
Once you have saved your data, you can exit and restart Emacs, or use
|
||
M-x kill-some-buffers to free up space. If you kill buffers
|
||
containing a substantial amount of text, you can go on editing.
|
||
|
||
Do not use M-x buffer-menu to save or kill buffers when you are out of
|
||
memory, because that needs a fair amount memory itself and you may not
|
||
have enough to get it started.
|
||
|
||
** The format of compiled files has changed incompatibly.
|
||
|
||
Byte-compiled files made with Emacs 19.29 normally use a new format
|
||
that will not work in older Emacs versions. You can compile files
|
||
in the old format if you wish; see "Changes in compilation," below.
|
||
|
||
** Emacs 19.29 supports the DEC Alpha.
|
||
|
||
** Emacs runs on Windows NT.
|
||
|
||
This port does not yet support windowing features. It works like a
|
||
text-only terminal, but it does support a mouse.
|
||
|
||
In general, support for non-GNU-like operating systems is not a high
|
||
priority for the GNU project. We merged in the support for Windows NT
|
||
because that system is expected to be very widely used.
|
||
|
||
** Emacs supports Motif widgets.
|
||
|
||
You can build Emacs with Motif widgets by specifying --with-x-toolkit=motif
|
||
when you run configure.
|
||
|
||
Motif defines collections of windows called "tab groups", and uses the
|
||
tab key and the cursor keys to move between windows in a tab group.
|
||
Emacs naturally does not support this--it has other uses for the tab
|
||
key and cursor keys. Emacs does not support Motif accelerators either,
|
||
because it uses its normal keymap event binding features.
|
||
|
||
We give higher priority to operation with a free widget set than to
|
||
operation with a proprietary one.
|
||
|
||
** If Emacs or the computer crashes, you can recover all the files you
|
||
were editing from their auto save files by typing M-x recover-session.
|
||
This first shows you a list of recorded interrupted sessions. Move
|
||
point to the one you choose, and type C-c C-c.
|
||
|
||
Then recover-session asks about each of the files that were being
|
||
edited during that session, asking whether to recover that file. If
|
||
you answer y, it calls recover-file, which works in its normal
|
||
fashion. It shows the dates of the original file and its auto-save
|
||
file and asks once again whether to recover that file.
|
||
|
||
When recover-session is done, the files you've chosen to recover
|
||
are present in Emacs buffers. You should then save them.
|
||
Only this--saving them--updates the files themselves.
|
||
|
||
** Menu bar menus now stay up if you click on the menu bar item and
|
||
release the mouse button within a certain amount of time. This is in
|
||
the X Toolkit version.
|
||
|
||
** The menu bar menus have been rearranged and split up to make for a
|
||
better organization. Two new menu bar menus, Tools and Search,
|
||
contain items that were formerly in the Files and Edit menus, as well
|
||
as some that did not exist in the menu bar menus before.
|
||
|
||
** Emacs can now display on more than one X display at the same time.
|
||
Use the command 'make-frame-on-display' to create a frame, specifying
|
||
which display to use.
|
||
|
||
** M-x talk-connect sets up a multi-user talk connection
|
||
via Emacs. Specify the X display of the person you want to talk to.
|
||
You can talk to any number of people (within reason) by using
|
||
this command repeatedly to specify different people.
|
||
|
||
Emacs does not make a fuss about security; the people who you talk to
|
||
can use all Emacs features, including visiting and editing files. If
|
||
this frightens you, don't use M-x talk-connect.
|
||
|
||
** The range of integer values is now at least 2**28 on all machines.
|
||
This means the maximum size of a buffer is at least 2**27-1,
|
||
or 134,217,727.
|
||
|
||
** When you start Emacs, you can now specify option names in
|
||
long GNU form (starting with '--') and you can abbreviate the names.
|
||
|
||
You can now specify the options in any order.
|
||
The previous requirements about the order of options
|
||
have been eliminated.
|
||
|
||
The -L or --directory option lets you specify an additional
|
||
directory to search for Lisp libraries (including libraries
|
||
that you specify with the -l or --load options).
|
||
|
||
** Incremental search in Transient Mark mode, if the mark is already
|
||
active, now leaves the mark active and does not change its position.
|
||
You can make incremental search deactivate the mark once again with
|
||
this expression.
|
||
|
||
(add-hook 'isearch-mode-hook #'deactivate-mark)
|
||
|
||
** C-delete now deletes a word backwards. This is for compatibility
|
||
with some editors in the PC world. (This key is not available on
|
||
ordinary ASCII terminals, because C-delete is not a distinct character
|
||
on those terminals.)
|
||
|
||
** ESC ESC ESC is now a command to escape from various temporary modes
|
||
and states.
|
||
|
||
** M-x pc-bindings-mode sets up bindings compatible with many PC editors.
|
||
In particular, Delete and its variants delete forward instead of backward.
|
||
Use Backspace to delete backward.
|
||
|
||
C-Backspace kills backward a word (as C-Delete normally would).
|
||
M-Backspace does undo.
|
||
Home and End move to beginning and end of line
|
||
C-Home and C-End move to beginning and end of buffer.
|
||
|
||
** The key sequence for evaluating a Lisp expression using the minibuffer
|
||
is now ESC :. It used to be ESC ESC, but we moved it to make way for
|
||
the ESC ESC ESC feature, on the grounds that people who evaluate Lisp
|
||
expressions are experienced users and can cope with a change.
|
||
If you prefer the old ESC ESC binding, put in your `~/.emacs':
|
||
|
||
(global-set-key "\e\e" 'eval-expression)
|
||
|
||
** The f1 function key is now equivalent to the help key. This is
|
||
done with 'key-translation-map'; delete the binding for f1 in that map
|
||
if you want to use f1 for something else.
|
||
|
||
** Mouse-3, in the simplest case, still sets the region. But now, it
|
||
places the mark where point was, and sets point where you click.
|
||
(It used to set the mark where you click and leave point alone.)
|
||
|
||
If you position point with Mouse-1, then scroll with the scroll bar
|
||
and use Mouse-3, Mouse-3 uses the position you specified with Mouse-1
|
||
even if it has scrolled off the screen (and point is no longer there).
|
||
This makes it easier to select a region with the mouse which is bigger
|
||
than a screenful.
|
||
|
||
Any editing of the buffer, and any cursor motion or scrolling for any
|
||
reason other than the scroll bar, cancels the special state set up by
|
||
Mouse-1--so that a subsequent Mouse-3 click will use the actual value
|
||
of point.
|
||
|
||
** C-mouse-3 now pops up a mode-specific menu of commands--normally
|
||
the same ones available in the mode's own menu bar menus.
|
||
|
||
** C-mouse-2 now pops up a menu of faces, indentation, justification,
|
||
and certain other text properties. This menu is also available
|
||
through the menu-bar Edit menu. It is meant for use with Enriched
|
||
mode.
|
||
|
||
*** You can use this menu to change the face of the region.
|
||
You can also set the face of the region with the new M-g command.
|
||
|
||
*** The menu also includes commands for indenting the region,
|
||
which locally changes the values of left-margin and fill-column that
|
||
are used.
|
||
|
||
*** All fill functions now indent every line to the left-margin. If
|
||
there is also a fill-prefix, that goes after the margin indentation.
|
||
|
||
*** 'open-line' and 'newline' also make sure that the lines they create
|
||
are indented to the left margin.
|
||
|
||
*** It also allows you to set the "justification" of the region:
|
||
whether it should be centered, flush right, and so forth. The fill
|
||
functions (including 'auto-fill-mode') will maintain the justification
|
||
and indentation that you request.
|
||
|
||
*** The new function 'list-colors-display' shows you what colors are
|
||
available. This is also accessible from the C-mouse-2 menu.
|
||
|
||
** You can now save and load files including their faces and other
|
||
text-properties by using Enriched-mode. Files are saved in an
|
||
extended version of the MIME text/enriched format. You can use the
|
||
menus described above, or M-g and other keyboard commands, to
|
||
alter the formatting information.
|
||
|
||
** C-mouse-1 now pops up the menu for changing the frame's default font.
|
||
|
||
** You can input Hyper, Super, Meta, and Alt characters, as well as
|
||
non-ASCII control characters, on an ASCII-only terminal.
|
||
To do this, use
|
||
|
||
C-x @ h -- hyper
|
||
C-x @ s -- super
|
||
C-x @ m -- meta
|
||
C-x @ a -- alt
|
||
C-x @ S -- shift
|
||
C-x @ c -- control
|
||
|
||
These are not ordinary key sequences; they operate through
|
||
function-key-map, which means they can be used even in the
|
||
middle of an ordinary key sequence.
|
||
|
||
** Outline minor mode and Hideif mode now use C-c @ as their prefix
|
||
character.
|
||
|
||
** Echo area messages are now logged in the "*Messages*" buffer. The
|
||
size of this buffer is limited to 'message-log-max' lines.
|
||
|
||
** RET in various special modes for read-only buffers that contain
|
||
lists of items now selects the item point is on. These modes include
|
||
Dired, Compilation buffers, Buffer-menu, Tar mode, and Occur mode.
|
||
(In Info, RET follows the reference near point; in completion list
|
||
buffers, RET chooses the completion around point.)
|
||
|
||
** 'set-background-color' now updates the modeline face in a special
|
||
way. If that face was previously set up to be reverse video, the
|
||
reverse of the default face, then set-background-color updates it so
|
||
that it remains the reverse of the default face.
|
||
|
||
** The functions 'raise-frame' and 'lower-frame' are now commands.
|
||
When used interactively, they apply to the selected frame.
|
||
|
||
** M-x buffer-menu now displays the buffer list in the selected window.
|
||
Use M-x buffer-menu-other-window to display it in another window.
|
||
|
||
** M-w followed by a kill command now *does not* append the text in
|
||
the kill ring. In consequence, M-w followed by C-w works as you would
|
||
expect: it leaves the top of the kill ring matching the region that
|
||
you killed.
|
||
|
||
** In Lisp mode, the C-M-x command now executes defvar forms in a
|
||
special way: it unconditionally sets the variable to the specified
|
||
default value, if there is one. Normal execution of defvar does not
|
||
alter the variable if it already has a non-void value.
|
||
|
||
** In completion list buffers, the left and right arrow keys run the
|
||
new commands 'previous-completion' and 'next-completion'. They move one
|
||
completion at a time.
|
||
|
||
** While doing completion in the minibuffer, the 'prior' or 'pageup'
|
||
key switches to the completion list window.
|
||
|
||
** When you exit the minibuffer with empty contents, the empty string
|
||
is not put in the minibuffer history.
|
||
|
||
** The default buffer for 'insert-buffer' is now the "first" buffer
|
||
other than the current one. If you have more than one window, this
|
||
is a buffer visible in another window. (Usually it is the buffer
|
||
that C-M-v would scroll.)
|
||
|
||
** The etags program is now capable of recording tags based on regular
|
||
expressions provided on the command line.
|
||
|
||
This new feature allows easy support for constructs not normally
|
||
handled by etags, such as the macros frequently used in big C/C++
|
||
projects to define project-specific structures. It also enables the
|
||
use of etags and TAGS files for languages not supported by etags.
|
||
|
||
The Emacs manual section on Tags contains explanations and examples
|
||
for Emacs's DEFVAR, VHDL, Cobol, PostScript and Tcl.
|
||
|
||
** Various mode-specific commands that used to be bound to C-c LETTER
|
||
have been moved.
|
||
|
||
*** In gnus-uu mode, gnus-uu-interactive-scan-directory is now on C-c C-d,
|
||
and gnus-uu-interactive-save-current-file is on C-c C-z.
|
||
|
||
*** In Scribe mode, scribe-insert-environment is now on C-c C-v,
|
||
scribe-chapter is on C-c C-c, scribe-subsection is on C-c C-s,
|
||
scribe-section is on C-c C-t, scribe-bracket-region-be is on C-c C-e,
|
||
scribe-italicize-word is on C-c C-i, scribe-bold-word is on C-c C-b,
|
||
and scribe-underline-word is on C-c C-u.
|
||
|
||
*** In Gomoku mode, gomoku-human-takes-back is now on C-c C-b,
|
||
gomoku-human-plays is on C-c C-p, gomoku-human-resigns is on C-c C-r,
|
||
and gomoku-emacs-plays is on C-c C-e.
|
||
|
||
*** In the Outline mode defined in 'allout',
|
||
'outline-rebullet-current-heading' is now on C-c *.
|
||
|
||
** M-s in Info now searches through the nodes of the Info file,
|
||
just like s. The alias M-s was added so that you can use the same
|
||
command for searches in both Info and Rmail.
|
||
|
||
** iso-acc.el now lets you enter inverted-! and inverted-?
|
||
with the sequences ~! and ~?.
|
||
|
||
** M-x compare-windows now pushes mark in both windows before
|
||
it starts moving point.
|
||
|
||
** There are two new commands in Dired, A ('dired-do-search')
|
||
and Q ('dired-do-query-replace'). These are similar to tags-search and
|
||
tags-query-replace, but instead of searching the list of files that
|
||
appears in a tags table, they search all the files marked in Dired.
|
||
|
||
** Changes to dabbrev.
|
||
|
||
A new function, 'dabbrev-completion' (bound to M-C-/), expands the
|
||
unique part of an abbreviation.
|
||
|
||
Dabbrev now looks for expansions in other buffers, looks for symbols
|
||
instead of words and it works in the minibuffer.
|
||
|
||
Dabbrev can be customized to work for shell scripts, with variables
|
||
that sometimes have and sometimes haven't a leading "$". See the
|
||
variable 'dabbrev-abbrev-skip-leading-regexp'.
|
||
|
||
** In Rmail, the command rmail-input-menu has been eliminated. The
|
||
feature of selecting an Rmail file from a menu is now implemented in
|
||
another way.
|
||
|
||
** Bookmarks changes.
|
||
|
||
*** It now works to set bookmarks in Info nodes.
|
||
|
||
*** Bookmarks can have annotations; type "C-h m" after doing
|
||
"M-x list-bookmarks", for more information on annotations.
|
||
|
||
*** The 'bookmark-jump' popup menu function is now 'bookmark-menu-jump', for
|
||
those who bind it to a mouse click.
|
||
|
||
*** The default bookmarks file name is now "~/.emacs.bmk". If you
|
||
already have a bookmarks file, it will be renamed automagically when
|
||
you next load it.
|
||
|
||
** New package, ps-print.
|
||
|
||
The ps-print package generates PostScript printouts of buffers or
|
||
regions, and includes face attributes such as color, underlining,
|
||
boldface and italics in the printed output.
|
||
|
||
** New package, msb.
|
||
|
||
The msb package provides a buffer-menu in the menubar with separate
|
||
menus for different types of buffers.
|
||
|
||
** `cpp.el' is a new library that can highlight or hide parts of a C
|
||
file according to C preprocessor conditionals. To try it, run the
|
||
command M-x cpp-highlight-buffer.
|
||
|
||
** Changes in CC mode.
|
||
|
||
*** c-set-offset and related functions and variables can now accept
|
||
variable symbols. Also ++ and -- which mean 2* positive and negative
|
||
c-basic-offset respectively.
|
||
|
||
*** New variable, 'c-recognize-knr-p', which controls whether K&R C
|
||
constructs will be recognized. Trying to recognize K&R constructs is a
|
||
time hog so if you're programming strictly in ANSI C, set this
|
||
variable to nil (it should already be nil in c++-mode).
|
||
|
||
*** New variable, 'c-hanging-comment-ender-p' for controlling
|
||
c-fill-paragraph's behavior.
|
||
|
||
*** New syntactic symbol: statement-case-open. This is assigned to lines
|
||
containing an open brace just after a case/default label.
|
||
|
||
*** New variable, 'c-progress-interval', which controls minibuffer update
|
||
message displays during long re-indentation. This is a new feature
|
||
which prints percentage complete messages at specified intervals.
|
||
|
||
** Makefile mode changes.
|
||
|
||
*** The electric keys are not enabled by default.
|
||
|
||
*** There is now a mode-specific menu bar menu.
|
||
|
||
*** The mode supports font-lock, add-log, and imenu.
|
||
|
||
*** The command M-TAB does completion of target names and variable names.
|
||
|
||
** icomplete.el now works more like a minor mode. Use M-x icomplete-mode
|
||
to turn it on and off.
|
||
|
||
Icomplete now supports an 'icomplete-minibuffer-setup-hook', which is
|
||
run on minibuffer setup whenever icompletion will be occurring. This
|
||
hook can be used to customize interoperation of icomplete with other
|
||
minibuffer-specific packages, eg rsz-mini. See the doc string for
|
||
more info.
|
||
|
||
** Ediff change.
|
||
|
||
Use 'ediff-revision' instead of 'vc-ediff'. It also replaces rcs-ediff,
|
||
for those who use that; if you want to use a version control package
|
||
other than vc.el, you must set the variable
|
||
'ediff-version-control-package' to specify which package.
|
||
|
||
** VC now supports branches with RCS.
|
||
|
||
You can use C-u C-x C-q to select any branch or version by number.
|
||
It reads the version number or branch number with the minibuffer,
|
||
then checks out the file unlocked.
|
||
|
||
Type C-x C-q again to lock the selected branch or version.
|
||
When you check in changes to that branch or version, there are two
|
||
possibilities:
|
||
|
||
-- If you've selected a branch, or a version at the tip of a branch,
|
||
then the new version adds to that branch. If you wish to create a
|
||
new branch, use C-u C-x C-q to specify a version number when you check
|
||
in the new version.
|
||
|
||
-- If you've selected an inner version which is not the latest in its
|
||
branch, then the new version automatically creates a new branch.
|
||
|
||
** VC now supports CVS as well as RCS and SCCS.
|
||
|
||
Since there are no locks in CVS, some things behave slightly
|
||
different when the backend is CVS. When 'vc-next-action' is invoked
|
||
in a directory handled by CVS, it does the following:
|
||
|
||
If the file is not already registered, this registers it for version
|
||
control. This does a "cvs add", but no "cvs commit".
|
||
If the file is added but not committed, it is committed.
|
||
If the file has not been changed, neither in your working area or
|
||
in the repository, a message is printed and nothing is done.
|
||
If your working file is changed, but the repository file is
|
||
unchanged, this pops up a buffer for entry of a log message; when you
|
||
finish the log message with C-c C-c, that checks in the resulting
|
||
changes along with the log message as change commentary. A writable
|
||
file remains in existence.
|
||
|
||
If vc-next-action changes the repository file, it asks you
|
||
whether to merge in the changes into your working copy.
|
||
|
||
'vc-directory', when started in a CVS file hierarchy, reports
|
||
all files that are modified (and thus need to be committed).
|
||
(When the backend is RCS or SCCS vc-directory reports all
|
||
locked files).
|
||
|
||
VC has no support for running the initial "cvs checkout" to get a
|
||
working copy of a module. You can only use VC in a working copy of
|
||
a module.
|
||
|
||
You can disable the CVS support as follows:
|
||
|
||
(setq vc-master-templates (delq 'vc-find-cvs-master vc-master-templates))
|
||
|
||
or by setting 'vc-handle-cvs' to nil.
|
||
|
||
This may be desirable if you run a non-standard version of CVS, or
|
||
if CVS was compiled with FORCE_USE_EDITOR or (possibly)
|
||
RELATIVE_REPOS.
|
||
|
||
** Comint and shell mode changes:
|
||
|
||
*** Completion works with file names containing quoted characters.
|
||
|
||
File names containing special characters (such as " ", "!", etc.) that are
|
||
quoted with a "\" character are recognized during completion. Special
|
||
characters are quoted when they are inserted during completion.
|
||
|
||
*** You can use M-x comint-truncate-buffer to truncate the buffer.
|
||
|
||
When this command is run, the buffer is truncated to a maximum number
|
||
of lines, specified by the variable comint-buffer-maximum-size. Just
|
||
like the command comint-strip-ctrl-m, this can be run automatically
|
||
during process output by doing this:
|
||
|
||
(add-hook 'comint-output-filter-functions
|
||
#'comint-truncate-buffer)
|
||
|
||
** Telnet mode buffer name changed.
|
||
|
||
The buffer name for a Telnet buffer is now *telnet-HOST*, not
|
||
*HOST-telnet*. This is for consistency with other Emacs packages.
|
||
|
||
** M-x man (man) is now faster and more robust. On systems where the
|
||
entire man page is indented, the indentation is removed.
|
||
|
||
The user option names that used to end in -p now end in -flag. The
|
||
new names are: 'Man-reuse-okay-flag', 'Man-downcase-section-letters-flag',
|
||
'Man-circular-pages-flag'. The 'Man-notify' user option has been renamed to
|
||
'Man-notify-method' and accepts one more value, 'pushy', that just
|
||
switches the current buffer to the manpage buffer, without switching
|
||
frames nor changing your windows configuration.
|
||
|
||
A new user option 'Man-fontify-manpage-flag' disables fontification
|
||
(thus speeding up man) when set to nil. Default is to fontify if a
|
||
window system is used. Two new user options 'Man-overstrike-face'
|
||
(default 'bold) and 'Man-underline-face' (default 'underline) can be set
|
||
to the preferred faces to be used for the words that man overstrikes
|
||
and underlines. Useful for those who like colored man pages.
|
||
|
||
Two new interactive functions are provided: 'Man-cleanup-manpage' and
|
||
'Man-fontify-manpage'. Both can be used on a buffer that contains the
|
||
output of a `rsh host man manpage' command, or the output of an
|
||
`nroff -man -Tman manpage' command to make them readable.
|
||
Man-cleanup-manpage is faster, but does not fontify.
|
||
|
||
** The new function 'modify-face' makes it easy to specify
|
||
all the attributes of a face, all at once.
|
||
|
||
** Faces now support background stippling.
|
||
|
||
Use the command 'set-face-stipple' to specify the stipple-pattern for a
|
||
face. Use 'face-stipple' to access the specified stipple pattern. The
|
||
existing face functions now handle the stipple pattern when
|
||
appropriate.
|
||
|
||
If you specify one of the standard gray colors as a face background
|
||
color, and your display doesn't handle gray, Emacs automatically uses
|
||
stipple instead to get the same effect.
|
||
|
||
** Changes in Font Lock mode.
|
||
|
||
*** Fontification
|
||
|
||
Two new default faces are provided; 'font-lock-variable-name-face' and
|
||
'font-lock-reference-face'. The face 'font-lock-doc-string-face' has
|
||
been removed since it is the same as the existing
|
||
'font-lock-string-face'. Where appropriate, fontification
|
||
automatically uses these new faces.
|
||
|
||
Fontification via commands 'font-lock-mode' and
|
||
'font-lock-fontify-buffer' is now cleanly interruptible (i.e., with
|
||
C-g). If you interrupt during the fontification process, the buffer
|
||
remains in its previous modified state and all highlighting is removed
|
||
from the buffer.
|
||
|
||
For C/C++ modes, Font Lock mode is much faster but highlights much
|
||
more. Other modes are faster/more extensive/more discriminatory, or a
|
||
combination of these.
|
||
|
||
To enable Font Lock mode, add the new function 'turn-on-font-lock' in
|
||
one of the following ways:
|
||
|
||
(add-hook 'c-mode-hook #'turn-on-font-lock)
|
||
|
||
Or for any visited file with:
|
||
|
||
(add-hook 'find-file-hooks #'turn-on-font-lock)
|
||
|
||
*** Supports color and grayscale displays
|
||
|
||
Font Lock mode supports different ways of highlighting, depending on
|
||
the type of display and background shade. Attributes (face color,
|
||
bold, italic and underline, and display type and background mode) can
|
||
be controlled either from Emacs Lisp or X resources.
|
||
|
||
See the new variables 'font-lock-display-type' and
|
||
'font-lock-face-attributes'.
|
||
|
||
*** Supports more modes
|
||
|
||
The following modes are directly supported:
|
||
|
||
'ada-mode', 'asm-mode', 'bibtex-mode', 'c++-c-mode', 'c++-mode', 'c-mode',
|
||
'change-log-mode', 'compilation-mode', 'dired-mode', 'emacs-lisp-mode',
|
||
'fortran-mode', 'latex-mode', 'lisp-mode', 'mail-mode', 'makefile-mode',
|
||
'outline-mode', 'pascal-mode', 'perl-mode', 'plain-tex-mode', 'rmail-mode',
|
||
'rmail-summary-mode', 'scheme-mode', 'shell-mode', 'slitex-mode', 'tex-mode',
|
||
'texinfo-mode'.
|
||
|
||
See the new variables 'font-lock-defaults-alist' and
|
||
'font-lock-defaults'.
|
||
|
||
Some modes support different levels of fontification. You can choose
|
||
to use the minimum or maximum available decoration by changing the
|
||
value of the new variable 'font-lock-maximum-decoration'.
|
||
|
||
Programmers are urged to make available to the community their own
|
||
keywords for modes not yet supported. See font-lock.el for
|
||
information about efficiency.
|
||
|
||
*** fast-lock
|
||
|
||
The fast-lock package speeds up Font Lock mode by saving font choices
|
||
in associated cache files. When you visit a file with Font Lock mode
|
||
and Fast Lock mode turned on for the first time, the file's buffer is
|
||
fontified as normal. When certain events occur (such as exiting
|
||
Emacs), Fast Lock saves the highlighting in a cache file. When you
|
||
subsequently visit this file, its cache is used to restore the
|
||
highlighting.
|
||
|
||
To use this package, put in your `~/.emacs':
|
||
|
||
(add-hook 'font-lock-mode-hook #'turn-on-fast-lock)
|
||
|
||
To control the use of caches, see the documentation for 'fast-lock-mode'.
|
||
|
||
** You can tell 'pop-to-buffer' to display certain buffers in the selected
|
||
window rather than finding some other window to display them in.
|
||
There are two variables you can use to specify these buffers.
|
||
|
||
'same-window-buffer-names' holds a list of buffer names; if a buffer's
|
||
name appears in this list, pop-to-buffer puts it in the selected window.
|
||
|
||
'same-window-regexps' holds a list of regexps--if any one of them
|
||
matches a buffer's name, then pop-to-buffer puts that buffer in the
|
||
selected window.
|
||
|
||
The default values of these variables are not nil: they list various
|
||
buffers that normally appear, when you as for them, in the selected
|
||
window. These include shell buffers, mail buffers, telnet buffers,
|
||
and others. By removing elements from these variables, you can ask
|
||
Emacs to display those buffers in separate windows.
|
||
|
||
** The 'special-display-buffer-names' and 'special-display-regexps' lists
|
||
have been generalized. An element may now be a list. The car of the list
|
||
is the buffer name or regular expression for matching buffer names.
|
||
|
||
The cdr of the list can be an alist specifying additional frame
|
||
parameters for use in constructing the special display frame.
|
||
|
||
Alternatively, the cdr can have this form:
|
||
|
||
(FUNCTION ARGS...)
|
||
|
||
where FUNCTION is a symbol. Then the frame is constructed by calling
|
||
FUNCTION; its first argument is the buffer, and its remaining
|
||
arguments are ARGS.
|
||
|
||
** If the environment variable REPLYTO is set, its value is the default
|
||
for 'mail-default-reply-to'.
|
||
|
||
** When you send a message in Emacs, if you specify an Rmail file with
|
||
the Fcc: header field, Emacs converts the message to Rmail format
|
||
before writing it. Thus, the file never contains anything but Rmail
|
||
format messages.
|
||
|
||
** The new variable 'mail-from-style' controls whether the From: header
|
||
should include the sender's full name, and if so, which format to use.
|
||
|
||
** The new variable 'mail-personal-alias-file' specifies the name of the
|
||
user's personal aliases. This defaults to the file ~/.mailrc.
|
||
mailabbrev.el used to have its own variable for this purpose
|
||
(mail-abbrev-mailrc-file). That variable is no longer used.
|
||
|
||
** In Buffer-Menu mode, the d and C-d commands (which mark buffers for
|
||
deletion) now accept a prefix argument which serves as a repeat count.
|
||
|
||
** Changes in BibTeX mode.
|
||
|
||
*** Reference keys can now be entered with TAB completion. All
|
||
reference keys defined in that buffer and all labels that appear in
|
||
crossreference entries are object to completion.
|
||
|
||
*** Braces are supported as field delimiters in addition to quotes.
|
||
BibTeX entries may have brace-delimited and quote-delimited fields
|
||
intermixed. The delimiters generated for new entries are specified by
|
||
the variables 'bibtex-field-left-delimiter' and
|
||
'bibtex-field-right-delimiter' on a buffer-local basis. Those variables
|
||
default to braces, since it is easier to put quote accented characters
|
||
(as the german umlauts) into a brace-delimited entry.
|
||
|
||
*** The function 'bibtex-clean-entry' can now be invoked with a prefix
|
||
argument. In this case, a label is automatically generated from
|
||
various fields in the record. If bibtex-clean-entry is invoked on a
|
||
record without label, a label is also generated automatically.
|
||
Various variables (all beginning with 'bibtex-autokey-') control the
|
||
creation of that key. The variable 'bibtex-autokey-edit-before-use'
|
||
determines, if the user is allowed to edit auto-generated reference
|
||
keys before they are used.
|
||
|
||
*** A New function 'bibtex-complete-string' completes strings with
|
||
respect to the strings defined in this buffer and a set of predefined
|
||
strings (initialized to the string macros defined in the standard
|
||
BibTeX style files) in the same way in which ispell-complete-word
|
||
works with respect to words in a dictionary. Candidates for
|
||
bibtex-complete-string are initialized from variable
|
||
'bibtex-predefined-strings' and by parsing the files found in
|
||
'bibtex-string-files' for @String definitions.
|
||
|
||
*** Every reference/field pair has now attached a comment which
|
||
appears in the echo area when this field is edited. These comments
|
||
should provide useful hints for BibTeX usage, especially for BibTeX
|
||
beginners. New variable 'bibtex-help-message' determines if these help
|
||
messages are to appear in the minibuffer when moving to a text entry.
|
||
|
||
*** Inscriptions of menu bar changed from "Entry Types" to
|
||
"Entry-Types" and "Bibtex Edit" to "BibTeX-Edit".
|
||
|
||
*** The variable bibtex-include-OPTcrossref is now not longer a binary
|
||
switch but a list of reference names which should contain a crossref
|
||
field. E.g., you can tell bibtex-mode you want a crossref field for
|
||
@InProceedings and @InBook entries but for no other.
|
||
|
||
*** The function validate-bibtex-buffer was completely rewritten to
|
||
validate if a buffer is syntactically correct. find-bibtex-duplicates
|
||
is no longer a function itself but was moved into
|
||
validate-bibtex-buffer.
|
||
|
||
*** Cleaning a BibTeX entry tests, if necessary fields are there.
|
||
E.g., if you tell bibtex-mode to include a crossref entry, some fields
|
||
are optional which would be required without the crossref entry. If
|
||
you now leave the crossref entry empty and do a bibtex-clean-entry
|
||
with some now required fields left empty, version 2.0 of bibtex.el
|
||
complains about the absence of these fields, whereas version 1.3
|
||
didn't.
|
||
|
||
*** Default value for variables bibtex-maintain-sorted-entries and
|
||
bibtex-sort-ignore-string-entries is now t.
|
||
|
||
*** All interactive functions are renamed to begin with 'bibtex-'.
|
||
|
||
*** Keybindings with \C-c\C-e entry changed for unification. Often
|
||
used reference types are now on control-modified keys, mediocre used
|
||
types are on unmodified keys, seldom used types are on shift-modified
|
||
keys and almost never used types on meta-modified keys.
|
||
|
||
|
||
* Configuration Changes in Emacs 19.29
|
||
|
||
** Emacs now uses directory /usr/local/share for most of its installed
|
||
files. This follows a GNU convention for directory usage.
|
||
|
||
** The option --with-x11 is no longer supported.
|
||
X11 is the only version of X that Emacs 19.29 supports;
|
||
use --with-x if you need to request X support explicitly.
|
||
(Normally this should not be necessary, since configure should
|
||
automatically enable X support if X is installed on your machine.)
|
||
|
||
** If you use the site-init.el file to set the variable
|
||
'mail-host-address' to a string in the dumped Emacs, that string becomes
|
||
the default host address for initializing 'user-mail-address'.
|
||
It is used instead of the value of (system-name).
|
||
|
||
|
||
* Lisp-Level Changes in Emacs 19.29
|
||
|
||
** Basic Lisp
|
||
|
||
*** The range of integer values is now at least 2**28 on all machines.
|
||
This means the maximum size of a buffer is at least 2**27-1,
|
||
or 134,217,727.
|
||
|
||
*** You can now use Common Lisp syntax for the backquote and comma
|
||
macros. Thus, you can now write `(x ,y z) instead of (` (x (, y) z)).
|
||
|
||
The old syntax is still accepted.
|
||
|
||
*** The new function 'rassoc' is like 'assoc', except that it compares the
|
||
key against the cdr of each alist element, where assoc would compare
|
||
it against the car of each alist element.
|
||
|
||
*** The new function 'unintern' deletes a symbol from an obarray. The
|
||
first argument can be the symbol to delete, or a string giving its
|
||
name. The second argument specifies the obarray (nil means the
|
||
current default obarray).
|
||
|
||
If the specified symbol is not in the obarray, or if there's no symbol
|
||
in the obarray matching the specified string, unintern does nothing
|
||
and returns nil. If it does delete a symbol, it returns t.
|
||
|
||
*** You can specify an alternative read function for use by 'load' and
|
||
'eval-region' by binding the variable 'load-read-function' to some other
|
||
function. This function should accept one argument just like read.
|
||
If load-read-function is nil, load and eval-region use ordinary read.
|
||
|
||
*** The new function 'type-of' takes any object as argument, and
|
||
returns a symbol identifying the type of that object--one of 'symbol',
|
||
'integer', 'float', 'string', 'cons', 'vector', 'marker', 'overlay',
|
||
'window', 'buffer', 'subr', 'compiled-function',
|
||
'window-configuration', 'process'.
|
||
|
||
*** When you use 'eval-after-load' for a file that is already loaded, it
|
||
executes the FORM right away. As before, if the file is not yet
|
||
loaded, it arranges to execute FORM if and when the file is loaded
|
||
later. The result is: if you have called eval-after-load for a file,
|
||
and if that file has been loaded, then regardless of the order of
|
||
these two events, the specified form has been evaluated.
|
||
|
||
*** The Lisp construct #@NUMBER now skips the next NUMBER characters,
|
||
treating them as a comment.
|
||
|
||
You would not want to use this in a file you edit by hand, but it is
|
||
useful for commenting out parts of machine-generated files.
|
||
|
||
*** Two new functions, 'plist-get' and 'plist-put',
|
||
allow you to modify and retrieve values from lists formatted as property-lists.
|
||
They work like 'get' and 'put', but operate on any list.
|
||
'plist-put' returns the modified property-list; you must store it
|
||
back where you got it.
|
||
|
||
*** The new function 'add-to-list' is called with two elements,
|
||
a variable that holds a list and a new element.
|
||
It adds the element to the list unless it is already present.
|
||
It compares elements using 'equal'. Here is an example:
|
||
|
||
(setq foo '(a b)) => (a b)
|
||
|
||
(add-to-list 'foo 'c) => (c a b)
|
||
|
||
(add-to-list 'foo 'b) => (c a b)
|
||
|
||
foo => (c a b)
|
||
|
||
** Changes in compilation.
|
||
|
||
Functions and variables loaded from a byte-compiled file
|
||
now refer to the file for their doc strings.
|
||
|
||
This has a few consequences:
|
||
|
||
-- Loading the file is faster and uses less memory.
|
||
-- Reference to doc strings is a little slower (the same speed
|
||
as reference to the doc strings of primitive and preloaded functions).
|
||
-- The compiled files will not work in old versions of Emacs.
|
||
-- If you move the compiled file after loading it, Emacs can no longer
|
||
find these doc strings.
|
||
-- If you alter the compiled file (such as by compiling a new
|
||
version), then further access to documentation strings will get
|
||
nonsense results.
|
||
|
||
The byte compiler now optionally supports lazy loading of compiled
|
||
functions' definitions. If you enable this feature when you compile,
|
||
loading the compiled file does not actually bring the function
|
||
definitions into core. Instead it creates references to the compiled
|
||
file, and brings each function's definition into core the first time
|
||
you call that function, or when you force it with the new function
|
||
'fetch-bytecode'.
|
||
|
||
Using the lazy loading feature has a few consequences:
|
||
|
||
-- Loading the file is faster and uses less memory.
|
||
-- Calling any function in the file for the first time is slower.
|
||
-- If you move the compiled file after loading it, Emacs can no longer
|
||
find the function definitions.
|
||
-- If you alter the compiled file (such as by compiling a new
|
||
version), then further access to functions not already loaded
|
||
will get nonsense results.
|
||
|
||
To enable the lazy loading feature, set up a non-nil file local
|
||
variable binding for the variable 'byte-compile-dynamic' in the Lisp
|
||
source file. For example, put this on the first line:
|
||
|
||
-*-byte-compile-dynamic: t;-*-
|
||
|
||
It's a good idea to use the lazy loading feature for a file that
|
||
contains many functions, most of which are not actually used by a
|
||
given user in a given session.
|
||
|
||
To turn off the basic feature of referring to the file for doc
|
||
strings, set 'byte-compile-dynamic-docstrings' to nil. You can do this
|
||
globally, or for one source file by adding this to the first line:
|
||
|
||
-*-byte-compile-dynamic-docstrings: nil;-*-
|
||
|
||
** Strings
|
||
|
||
*** Do not pass integer arguments to 'concat' (or 'vconcat' or
|
||
'append'). We are phasing out the old unrecommended support for
|
||
integers as arguments to these functions, in preparation for treating
|
||
numbers as single characters in a future release. To concatenate
|
||
numbers in string form, use 'number-to-string' first, or rewrite the
|
||
call to use 'format' instead of 'concat'.
|
||
|
||
*** The new function 'match-string' returns the string of text matched at
|
||
the given parenthesized expression by the last regexp search, or nil
|
||
if there was no match. If the last match was by 'string-match' on a
|
||
string, the string must be given. Therefore, this function can be
|
||
used in place of 'buffer-substring' and 'substring', when using
|
||
'match-beginning' and 'match-end' to find match positions.
|
||
|
||
(match-string N) or (match-string N STRING)
|
||
|
||
*** The function replace-match now accepts an optional fourth argument,
|
||
STRING. Use this after performing string-match on STRING, to replace
|
||
the portion of STRING that was matched. When used in this way,
|
||
replace-match returns a newly created string which is the same as
|
||
STRING except for the matched portion.
|
||
|
||
*** The new function 'buffer-substring-no-properties'
|
||
is like 'buffer-substring' except that the string it returns
|
||
has no text properties.
|
||
|
||
*** The function 'equal' now considers two strings to be different
|
||
if they don't have the same text properties.
|
||
|
||
** Completion
|
||
|
||
*** all-completions now takes an optional fourth argument.
|
||
If that argument is non-nil, completions that start with a space
|
||
are ignored unless the initial string also starts with a space.
|
||
(This used to happen unconditionally.)
|
||
|
||
** Local Variables
|
||
|
||
*** Local hook variables.
|
||
|
||
There is now a clean way to give a hook variable a buffer-local value.
|
||
Call the function 'make-local-hook' to do this.
|
||
|
||
Once a hook variable is buffer-local, you can add hooks to it either
|
||
globally or locally. run-hooks runs the local hook functions
|
||
of the current buffer, then all the global hook functions.
|
||
|
||
The functions add-hook and remove-hook take an additional optional
|
||
argument LOCAL which says whether to add (or remove) a local hook
|
||
function or a global one.
|
||
|
||
Local hooks use t as an element of the (local) value of the hook
|
||
variable as a flag meaning to use the global value also.
|
||
|
||
*** The new function 'local-variable-p' tells you whether a particular
|
||
variable is buffer-local in the current buffer or a specified buffer.
|
||
|
||
** Editing Facilities
|
||
|
||
*** The function 'copy-region-as-kill' no longer sets this-command;
|
||
as a result, a following kill command will not normally append
|
||
to the text saved by copy-region-as-kill.
|
||
|
||
*** Regular expression searching and matching no longer performs full
|
||
Posix backtracking by default. They now stop with the first match found
|
||
instead of looking for the longest match--just as they did in Emacs 18.
|
||
The reason for this change is to get higher speed.
|
||
|
||
There are new functions you can use if you really want to search or
|
||
match with Posix behavior: 'posix-search-forward',
|
||
'posix-search-backward', 'posix-looking-at', and 'posix-string-match'.
|
||
Call these just like 're-search-forward', 're-search-backward',
|
||
'looking-at', and 'string-match'.
|
||
|
||
** Files
|
||
|
||
*** The new variable 'format-alist' defines file formats,
|
||
which are ways of translating between the data in a file and things
|
||
(text, text-properties, and possibly other information) in a buffer.
|
||
|
||
'format-alist' has one element for each format. Each element is a
|
||
list like this:
|
||
(NAME DOC-STRING REGEXP FROM-FN TO-FN MODIFY MODE-FN)
|
||
containing the name of the format, a documentation string, a regular
|
||
expression which is used to recognize files in that format, a decoding
|
||
function, an encoding function, a flag that indicates whether the
|
||
encoding function modifies the buffer, and a mode function.
|
||
|
||
FROM-FN is called to decode files in that format; it gets two args, BEGIN
|
||
and END, and can make any modifications it likes, returning the new
|
||
end position. It must make sure that the beginning of the file no
|
||
longer matches REGEXP, or else it will get called again.
|
||
TO-FN is called to encode a region into that format; it is also passed BEGIN
|
||
and END, and either returns a list of annotations as in
|
||
'write-region-annotate-functions', or modifies the region and returns
|
||
the new end position.
|
||
MODIFY, if non-nil, means the TO-FN modifies the region. If nil, TO-FN may
|
||
not make any changes and should return a list of annotations.
|
||
|
||
'insert-file-contents' checks the beginning of the file that it is
|
||
inserting to see if it matches one of the regexps. If so, then it
|
||
calls the decoding function, and then looks for another match. When
|
||
visiting a file, it also calls the mode function, and sets the
|
||
variable 'buffer-file-format' to the list of formats that the file
|
||
used.
|
||
|
||
'write-region' calls the encoding functions for each format in
|
||
'buffer-file-format' before it writes the file. To save a file in a
|
||
different format, either set 'buffer-file-format' to a different
|
||
value, or call the new function 'format-write-file'.
|
||
|
||
Since some encoding functions may be slow, you can request that
|
||
auto-save use a format different from the buffer's default by setting
|
||
the variable 'auto-save-file-format' to the desired format. This will
|
||
determine the format of all auto-save files.
|
||
|
||
*** The new function 'file-ownership-preserved-p' tells you whether
|
||
deleting a file and recreating it would keep the file's owner
|
||
unchanged.
|
||
|
||
*** The new function 'file-regular-p' returns t if a file
|
||
is a "regular" file (not a directory, symlink, named pipe,
|
||
terminal, or other I/O device).
|
||
|
||
*** The new function 'file-name-sans-extension' discards the extension
|
||
of a file name. You call it with a file name, and returns a string
|
||
lacking the extension.
|
||
|
||
*** The variable 'path-separator' is a string which says which
|
||
character separates directories in a search path. It is ":"
|
||
for Unix and GNU systems, ";" for MSDOG and Windows NT.
|
||
|
||
** Commands and Key Sequences
|
||
|
||
*** Key sequences consisting of C-c followed by {, }, <, >, : or ; are
|
||
now reserved for major modes. Sequences consisting of C-c followed by
|
||
any other punctuation character are now meant for minor modes. We don't
|
||
plan to convert all existing major modes to stop using those sequences,
|
||
but we hope to keep them to a minimum.
|
||
|
||
*** When the post-command-hook or the pre-command-hook gets an error, the error
|
||
is silently ignored. Emacs no longer sets the hook variable to nil when this
|
||
happens. Meanwhile, the hook functions can now alter the hook variable in
|
||
a normal fashion; there is no need to do anything special.
|
||
|
||
*** define-key, lookup-key, and various other functions for changing or
|
||
looking up key bindings now let you write an event type with a list
|
||
like (ctrl meta newline) or (meta ?d), as in XEmacs. (ctrl meta newline)
|
||
is equivalent to the event type symbol C-M-newline, and (meta ?d)
|
||
is equivalent to the character ?\M-d.
|
||
|
||
*** The function 'event-convert-list' converts a list such as
|
||
(meta ?d) into the corresponding event type (a symbol or integer).
|
||
|
||
*** In an interactive spec, 'k' means to read a key sequence. In this
|
||
key sequence, upper case characters and shifted function keys which
|
||
have no bindings are converted to lower case if that makes them
|
||
defined.
|
||
|
||
The new interactive code 'K' reads a key sequence similarly, but does
|
||
not convert the last event. 'K' is useful for reading a key sequence
|
||
to be given a binding.
|
||
|
||
*** The variable 'overriding-local-map' now has no effect on the menu bar
|
||
display unless 'overriding-local-map-menu-flag' is non-nil. This is why
|
||
incremental search no longer temporarily changes the menu bars.
|
||
|
||
Note that overriding-local-map does still affect the execution of key
|
||
sequences entered using the menu bar. So if you use
|
||
overriding-local-map, and a menu bar key sequence comes in, you should
|
||
make sure to clear overriding-local-map before that key sequence gets
|
||
looked up and executed. But this is what you'd normally do anyway:
|
||
programs that use overriding-local-map normally exit and "put back"
|
||
any event such as menu-bar that they do not handle specially.
|
||
|
||
*** The new variable 'overriding-terminal-local-map' is like
|
||
'overriding-local-map', but is specific to a single terminal.
|
||
|
||
*** 'delete-frame' events.
|
||
|
||
When you use the X window manager's "delete window" command, this now
|
||
generates a delete-frame event. The standard definition of this event
|
||
is a command that deletes the frame that received the event, and kills
|
||
Emacs when the last visible or iconified frame is deleted. You can
|
||
rebind the event to some other command if you wish.
|
||
|
||
*** Two new types of events, 'iconify-frame' and 'make-frame-visible',
|
||
indicate that the user iconified or deiconified a frame with the
|
||
window manager. Since the window manager has already done the work,
|
||
the default definition for both event types in Emacs is to do nothing.
|
||
|
||
** Frames and X
|
||
|
||
*** Certain Lisp variables are now local to an X terminal (in other
|
||
words, all the screens of a single X server). The value in effect, at
|
||
any given time, is the one that belongs to the terminal of the
|
||
selected frame. The terminal-local variables are
|
||
'default-minibuffer-frame', 'system-key-alist', 'defining-kbd-macro', and
|
||
'last-kbd-macro'. There is no way for Lisp programs to create others.
|
||
|
||
The terminal-local variables cannot be buffer-local.
|
||
|
||
*** When you create an X frame, for the 'top' and 'left' frame
|
||
parameters, you can now use values of the form (+ N) or (- N), where N
|
||
is an integer. (+ N) means N pixels to the right of the left edge of
|
||
the screen and (- N) means N pixels to the left of the right edge. In
|
||
both cases, N may be zero (exactly at the edge) or negative (putting
|
||
the window partly off the screen).
|
||
|
||
The function 'x-parse-geometry' can return values of these forms
|
||
for certain inputs.
|
||
|
||
*** The variable 'menu-bar-file-menu' has been renamed to
|
||
'menu-bar-files-menu' to match the actual item that appears in the menu.
|
||
(All the other such variable names do match.)
|
||
|
||
*** The new function 'active-minibuffer-window' returns the minibuffer window
|
||
currently active, or nil if none is now active.
|
||
|
||
*** In the functions 'next-window', 'previous-window', 'next-frame',
|
||
'previous-frame', 'get-buffer-window', 'get-lru-window', 'get-largest-window'
|
||
and 'delete-windows-on', if you specify 0 for the last argument,
|
||
it means to consider all visible and iconified frames.
|
||
|
||
*** When you set a frame's cursor type with 'modify-frame-parameters',
|
||
you can now specify (bar . INTEGER) as the cursor type. This stands
|
||
for a bar cursor of width INTEGER.
|
||
|
||
*** The new function 'facep' returns t if its argument is a face name
|
||
(or if it is a vector such as is used internally by the Lisp code
|
||
to represent a face).
|
||
|
||
*** Each frame can now have a buffer-predicate function,
|
||
which is the 'buffer-predicate' frame parameter.
|
||
When 'other-buffer' looks for an alternative buffer, it considers
|
||
only the buffers that fit the selected frame's buffer predicate (if it
|
||
has one). This is useful for applications that make their own frames.
|
||
|
||
*** When you create an X frame, you can now specify the frame parameter
|
||
'display'. This says which display to put the frame on. The value
|
||
should be a display name--a string of the form
|
||
"HOST:DPYNUMBER.SCREENNUMBER".
|
||
|
||
The functions x-server-... and x-display-... now take an optional
|
||
argument which specifies the display to ask about. You can use either
|
||
a display name string or a frame. A value of nil stands for the
|
||
selected frame.
|
||
|
||
To close the connection to an X display, use the function
|
||
'x-close-connection'. Specify which display with a display name. You
|
||
cannot close the connection if Emacs still has frames open on that
|
||
display.
|
||
|
||
'x-display-list' returns a list indicating which displays Emacs has
|
||
connections to. Its elements are display names (strings).
|
||
|
||
*** The icon-type frame parameter may now be a file name.
|
||
Then the contents of that file specify the icon bitmap to use
|
||
for that frame.
|
||
|
||
*** The title of an Emacs frame, displayed by most window managers, is
|
||
set from 'frame-title-format' or 'icon-title-format'. These have the same
|
||
structure as 'mode-line-format'.
|
||
|
||
*** 'x-display-grayscale-p' is a new function that returns non-nil if
|
||
your X server can display shades of gray. Currently it returns
|
||
non-nil for color displays (because they can display shades of gray);
|
||
we may change it in the next version to return nil for color displays.
|
||
|
||
*** The frame parameter 'scroll-bar-width' specifies the width of the
|
||
scrollbar in pixels.
|
||
|
||
** Buffers
|
||
|
||
*** Creating a buffer with 'get-buffer-create' does not obey
|
||
'default-major-mode'. That variable is now handled in a separate
|
||
function, 'set-buffer-major-mode'. 'get-buffer-create' and
|
||
'generate-new-buffer' always leave the newly created buffer
|
||
in Fundamental mode.
|
||
|
||
Creating a new buffer by visiting a file or with 'switch-to-buffer',
|
||
'pop-to-buffer', and similar functions does call 'set-buffer-major-mode'
|
||
to select the default major mode specified with 'default-major-mode'.
|
||
|
||
*** You can now create an "indirect buffer". An indirect buffer shares
|
||
its text, including text properties, with another buffer (the "base
|
||
buffer"), but has its own major mode, local variables, overlays, and
|
||
narrowing. An indirect buffer has a name of its own, distinct from
|
||
those of the base buffer and all other buffers. An indirect buffer
|
||
cannot itself be visiting a file (though its base buffer can be).
|
||
The base buffer cannot itself be indirect.
|
||
|
||
Use 'make-indirect-buffer' to make an indirect buffer.
|
||
If the base buffer is an indirect buffer, its base buffer is used as
|
||
the base for the new buffer.
|
||
|
||
You can make an indirect buffer current, or switch to it in a window,
|
||
just as you would a non-indirect buffer.
|
||
|
||
The function 'buffer-base-buffer', given an indirect buffer, returns its
|
||
base buffer. It returns nil when given an ordinary buffer (not
|
||
indirect).
|
||
|
||
The library 'noutline' has versions of Outline mode and Outline minor
|
||
mode which let you display different parts of the outline in different
|
||
indirect buffers.
|
||
|
||
** Subprocesses
|
||
|
||
*** The functions 'call-process' and 'call-process-region' now allow
|
||
you to direct error message output from the subprocess into a
|
||
separate destination, instead of mixing it with ordinary output.
|
||
To do this, specify for the third argument, BUFFER, a list of the form
|
||
(BUFFER-OR-NAME ERROR-DESTINATION)
|
||
BUFFER-OR-NAME specifies where to put ordinary output; it should
|
||
be a buffer or buffer name, or t, nil or 0. This is what would
|
||
have been the BUFFER argument, ordinarily.
|
||
|
||
ERROR-DESTINATION specifies where to put the error output.
|
||
nil means discard it, t means mix it with the ordinary output,
|
||
and a string specifies a file name to write this output into.
|
||
|
||
You can't specify a buffer to put the error output in; that is not
|
||
easy to implement directly. You can put the error output into a
|
||
buffer by sending it to a temporary file and then inserting the file
|
||
into a buffer.
|
||
|
||
*** Comint mode changes:
|
||
|
||
**** The variable comint-completion-addsuffix can also be a cons pair
|
||
of the form (DIRSUFFIX . FILESUFFIX), where DIRSUFFIX and FILESUFFIX are
|
||
strings added on unambiguous or exact completion of directories and file
|
||
names, respectively.
|
||
|
||
** Text properties
|
||
|
||
*** You can now specify which values of the 'invisible' property
|
||
make text invisible in a given buffer. The variable
|
||
'buffer-invisibility-spec', which is always local in all buffers,
|
||
controls this.
|
||
|
||
If its value is t, then any non-nil 'invisible' property makes
|
||
a character invisible.
|
||
|
||
If its value is a list, then a character is invisible if its
|
||
'invisible' property value appears as a member of the list, or if it
|
||
appears as the car of a member of the list.
|
||
|
||
When the 'invisible' property value appears as the car of a member of
|
||
the 'buffer-invisibility-spec' list, then the cdr of that member has
|
||
an effect. If it is non-nil, then an ellipsis appears in place of the
|
||
character. (This happens only for the *last* invisible character in a
|
||
series of consecutive invisible characters, and only at the end of a
|
||
line.)
|
||
|
||
If a character's 'invisible' property is a list, then Emacs checks each
|
||
element of the list against 'buffer-invisibility-spec'. If any element
|
||
matches, the character is invisible.
|
||
|
||
*** The command 'list-text-properties-at' shows what text properties
|
||
are in effect at point.
|
||
|
||
*** Frame objects now exist in Emacs even on systems that don't support
|
||
X Windows. You can create multiple frames, and switch between them
|
||
using 'select-frame'. The selected frame is actually displayed on your
|
||
terminal; other frames are not displayed at all. The selected frame
|
||
number appears in the mode line after 'Emacs', except for frame 1.
|
||
|
||
Switching frames on ASCII terminals is therefore more or less
|
||
equivalent to switching between different window configurations.
|
||
|
||
*** The new variable 'window-size-change-functions' holds a list of
|
||
functions to be called if window sizes change (or if windows are
|
||
created or deleted). The functions are called once for each frame on
|
||
which changes have occurred, with the frame as the sole argument.
|
||
This takes place shortly before redisplay.
|
||
|
||
*** The modification hook functions of overlays now work differently.
|
||
They are called both before and after each change. This makes it
|
||
possible for the functions to determine exactly what the change was.
|
||
|
||
This change affects three overlay properties: the modification-hooks
|
||
property, a list of functions called for deletions overlapping the
|
||
overlay's range and for insertions inside it; the
|
||
insert-in-front-hooks, a list of functions called for insertions at
|
||
the beginning of the overlay; and the insert-behind-hooks, a list of
|
||
functions called for insertions at the end of the overlay.
|
||
|
||
Each function is called both before and after each change that it
|
||
applies to. Before the change, it is called with four arguments:
|
||
(funcall FUNCTION OVERLAY nil START END)
|
||
START and END are the same arguments that the before-change-functions
|
||
receive.
|
||
|
||
After the change, each function is called with five arguments:
|
||
(funcall FUNCTION OVERLAY t START END OLDSIZE)
|
||
The last arguments, START and END and OLDSIZE,
|
||
are the same arguments that the after-change-functions receive.
|
||
|
||
This means the function must accept either four or five arguments.
|
||
|
||
*** You can set defaults for text-properties with the new variable
|
||
'default-text-properties'. Its value is a property list; the values
|
||
specified there are used whenever a character (or its category) does
|
||
not specify a value.
|
||
|
||
*** The 'face' property of a character or an overlay can now be a list
|
||
of face names. Formerly it had to be just one face name.
|
||
|
||
*** Changes in handling the 'intangible' text property.
|
||
|
||
**** If inhibit-point-motion-hooks is non-nil, then 'intangible' properties
|
||
are ignored.
|
||
|
||
**** Moving to just before a stretch of intangible text
|
||
is no longer special in any way. Point stays at that place.
|
||
|
||
**** When you move point backwards into the midst of intangible text,
|
||
point moves back to the beginning of that text. (It used to move
|
||
forward to the end of that text, which was not very useful.)
|
||
|
||
**** When moving across intangible text, Emacs stops wherever the
|
||
property value changes. So if you have two stretches of intangible
|
||
text, with different non-nil intangible properties, it is possible to
|
||
place point between them.
|
||
|
||
** Overlays
|
||
|
||
*** Overlay changes.
|
||
|
||
**** The new function 'previous-overlay-change' returns the position of
|
||
the previous overlay start or end, before a specified position. This
|
||
is the backwards-moving counterpart of 'next-overlay-change'.
|
||
|
||
**** 'overlay-get' now supports category properties on an overlay
|
||
the same way 'get-text-property' supports them as text properties.
|
||
|
||
Specifically, if an overlay does not have the property PROP that you
|
||
ask for, but it does have a 'category' property which is a symbol,
|
||
then that symbol's PROP property is used.
|
||
|
||
**** If an overlay has a non-nil 'evaporate' property, it will be
|
||
deleted if it ever becomes empty (i.e., when it spans no characters).
|
||
|
||
**** If an overlay has a 'before-string' and/or 'after-string' property,
|
||
these strings are displayed at the overlay's endpoints.
|
||
|
||
** Filling
|
||
|
||
*** The new variable 'fill-paragraph-function' provides a way for major
|
||
modes to override the filling of paragraphs. If this is non-nil,
|
||
fill-paragraph calls it as a function, passing along its sole
|
||
argument. If the function returns non-nil, fill-paragraph assumes it
|
||
has done the job and simply passes on whatever value it returned.
|
||
|
||
The usual use of this feature is to fill comments in programming
|
||
language modes.
|
||
|
||
*** Text filling and justification changes:
|
||
|
||
**** The new variable 'use-hard-newlines' can be used to make a
|
||
distinction between "hard" and "soft" newlines; the fill functions
|
||
will then never remove a newline that was manually inserted. Hard
|
||
newlines are marked with a non-nil 'hard' text-property.
|
||
|
||
**** The 'fill-column' and 'left-margin' can now be modified by text-properties.
|
||
Most lisp programs should use the new functions (current-fill-column) and
|
||
(current-left-margin), which return the proper values to use for the
|
||
current line.
|
||
|
||
**** There are new functions for dealing with margins:
|
||
|
||
***** 'set-left-margin' and 'set-right-margin' (set the value for a region
|
||
and re-fill). These functions take three arguments: two to specify
|
||
a region, and the desired margin value.
|
||
|
||
***** 'increase-left-margin', 'decrease-left-margin', 'increase-right-margin',
|
||
and 'decrease-right-margin' (change settings relative to current values, and
|
||
re-fill).
|
||
|
||
***** 'move-to-left-margin' moves point there, optionally adding
|
||
indentation or changing tabs to spaces in order to make that possible.
|
||
'beginning-of-line-text' also moves past the 'fill-prefix' and any
|
||
indentation added to center or right-justify a line, to the beginning
|
||
of the text that the user actually typed.
|
||
|
||
***** 'delete-to-left-margin' removes any left-margin indentation, but
|
||
does not change the property.
|
||
|
||
**** The paragraph-movement functions look for the 'paragraph-start' and
|
||
'paragraph-separate' regexps at the current left margin, not at the
|
||
beginning of the line. This means that those regexps should NOT use ^
|
||
to anchor the search. However, for backwards compatibility, a ^ at
|
||
the beginning of the regexp will be ignored, so most packages won't break.
|
||
|
||
**** 'justify-current-line' is now capable of doing left, center, or
|
||
right justification as well as full justification.
|
||
|
||
**** The fill functions can do any kind of justification based on the new
|
||
'justification' text-property and 'default-justification' variable,
|
||
or arguments to the functions. They also have a new option which
|
||
defeats the normal removal of extra whitespace.
|
||
|
||
**** The new function 'current-justification' returns the kind of
|
||
justification used for the current line. The new function
|
||
'set-justification' can be used to change it, including re-justifying
|
||
the text of the region according to the new value.
|
||
|
||
**** Filling and auto-fill are disabled if justification is 'none'.
|
||
|
||
**** The 'auto-fill-function' is now called regardless of whether
|
||
the fill-column has been exceeded; the function can determine on its
|
||
own whether filling (or justification) is necessary.
|
||
|
||
**** New helper function 'indent-line-to'
|
||
|
||
** Processes
|
||
|
||
*** 'process-tty-name' is a new function that returns the name of the
|
||
terminal that the process itself reads and writes on (not the name of
|
||
the pty that Emacs uses to talk with that terminal).
|
||
|
||
*** Errors in process filters and sentinels are now normally caught
|
||
automatically, so that they don't abort other Lisp programs.
|
||
|
||
Setting 'debug-on-error' non-nil turns off this feature; then errors in
|
||
filters and sentinels are not caught. As a result, they can invoke
|
||
the debugger, under the control of debug-on-error.
|
||
|
||
*** Emacs now preserves the match data around the execution of process
|
||
filters and sentinels. You can use search and match functions freely
|
||
in filters and sentinels without explicitly bothering to save the
|
||
match data.
|
||
|
||
** Display
|
||
|
||
*** The variable 'message-log-max' controls how messages are logged in the
|
||
"*Messages*" buffer. An integer value means to keep that many lines;
|
||
t means to log with no limit; nil means disable message logging. Lisp
|
||
code that calls 'message' excessively (e.g. isearch.el) should probably
|
||
bind this variable to nil.
|
||
|
||
*** Display tables now have a new element, at index 261, specifying the
|
||
glyph to use for the separator between two side-by-side windows. By
|
||
default, this is the vertical bar character `|'. Probably the only
|
||
other useful character to store for this element is a space, to make
|
||
less visual separation between two side-by-side windows displaying
|
||
related information.
|
||
|
||
*** The new 'mode-line-format' spec %c displays the current column number.
|
||
|
||
*** The new variable 'blink-matching-delay' specifies how long to keep
|
||
the cursor at the matching open-paren, after you insert a close-paren.
|
||
This is useful mainly on systems which can wait for a fraction of a
|
||
second--you can then specify fractional values such as 0.5.
|
||
|
||
*** Faster processing of buffers with long lines
|
||
|
||
The new variable 'cache-long-line-scans' determines whether Emacs
|
||
should use caches to handle long lines more quickly. This variable is
|
||
buffer-local, in all buffers.
|
||
|
||
Normally, the line-motion functions work by scanning the buffer for
|
||
newlines. Columnar operations (like 'move-to-column' and
|
||
'compute-motion') also work by scanning the buffer, summing character
|
||
widths as they go. This works well for ordinary text, but if the
|
||
buffer's lines are very long (say, more than 500 characters), these
|
||
motion functions will take longer to execute. Emacs may also take
|
||
longer to update the display.
|
||
|
||
If cache-long-line-scans is non-nil, these motion functions cache
|
||
the results of their scans, and consult the cache to avoid rescanning
|
||
regions of the buffer until the text is modified. The caches are most
|
||
beneficial when they prevent the most searching---that is, when the
|
||
buffer contains long lines and large regions of characters with the
|
||
same, fixed screen width.
|
||
|
||
When cache-long-line-scans is non-nil, processing short lines will
|
||
become slightly slower (because of the overhead of consulting the
|
||
cache), and the caches will use memory roughly proportional to the
|
||
number of newlines and characters whose screen width varies.
|
||
|
||
The caches require no explicit maintenance; their accuracy is
|
||
maintained internally by the Emacs primitives. Enabling or disabling
|
||
the cache should not affect the behavior of any of the motion functions;
|
||
it should only affect their performance.
|
||
|
||
** System Interface
|
||
|
||
*** The function 'user-login-name' now accepts an optional
|
||
argument uid. If the argument is non-nil, user-login-name
|
||
returns the login name for that user id.
|
||
|
||
*** 'system-name', 'user-name', 'user-full-name' and 'user-real-name' are
|
||
now variables as well as functions. The variables hold the same values
|
||
that the functions would return. The new variable 'multiple-frames'
|
||
is non-nil if at least two non-minibuffer frames are visible. These
|
||
variables may be useful in constructing the value of 'frame-title-format'
|
||
or 'icon-title-format'.
|
||
|
||
*** Changes in time-conversion functions.
|
||
|
||
**** The new function 'format-time-string' takes a format string and a
|
||
time value. It converts the time to a string, according to the format
|
||
specified. You can specify what kind of conversion to use with
|
||
%-specifications.
|
||
|
||
**** The new function 'decode-time' converts a time value into a list of
|
||
specific items of information: the year, month, day of week, day of
|
||
month, hour, minute and second. (A time value is a list of two or
|
||
three integers.)
|
||
|
||
**** The new function 'encode-time' converts specific items of time
|
||
information--the second, minute, hour, day, month, year, and time
|
||
zone--into a time value.
|
||
|
||
|
||
|
||
* Changes in Emacs 19.27
|
||
|
||
There are no changes; however, here is one bug fix made in 19.26 that users
|
||
think should be documented here.
|
||
|
||
** SPC and DEL in Info now handle menus consistently.
|
||
|
||
SPC and DEL scroll through an entire subtree an Info manual. Once you
|
||
scroll through a node far enough to reach a menu, SPC begins moving
|
||
into the subnodes of the menu, starting with the first one. When you
|
||
reach the end of a subnode, SPC moves into the next subnode, and so
|
||
on.
|
||
|
||
DEL more or less scrolls through the same text in reverse order.
|
||
|
||
|
||
|
||
* User Editing Changes in Emacs 19.26
|
||
|
||
** In the X toolkit version, if you click on a menu bar item and
|
||
release the button quickly outside the menu, the menu remains visible
|
||
until you click or type something else. If you click on the menu, you
|
||
select from the menu. Any other mouse click makes the menu disappear.
|
||
Keyboard input gets rid of the menu and then is processed normally.
|
||
|
||
"Quickly" means within double-click-time milliseconds.
|
||
|
||
** The C-x 5 commands to select a buffer in "another frame" now use an
|
||
existing iconified frame, if any, deiconifying it. They also raise
|
||
the frame.
|
||
|
||
** Region highlighting on a black-and-white-only display now uses
|
||
underlining. Inverse-video had the problem that you couldn't see
|
||
the cursor.
|
||
|
||
** You can now change the height of a window by pressing mouse-1 on
|
||
the mode line and dragging it up and down.
|
||
|
||
** If you set the environment variable LC_CTYPE to iso_8859_1 or
|
||
iso-8859-1, Emacs automatically sets up for display and syntactic
|
||
handling of the ISO Latin-1 character set.
|
||
|
||
This does not automatically load any of the packages for input of
|
||
these characters, because it's not yet clear what is right to do.
|
||
You must still explicitly load either iso-transl or iso-acc.
|
||
|
||
** For a read-only buffer that is also modified, the mode line now displays
|
||
%* instead of %%.
|
||
|
||
** M-prior ('scroll-other-window-down') is a new command that works like
|
||
M-next (and C-M-v) but scrolls in the opposite direction.
|
||
|
||
M-home moves to the beginning of the buffer, in the other window.
|
||
M-end moves to the end of the buffer, in the other window. These two
|
||
commands, along with M-next and M-prior, form a series of commands for
|
||
moving around in the other window.
|
||
|
||
** In change logs, the mail address is now delimited with <...> instead
|
||
of (...).
|
||
|
||
This makes it a little more convenient to extract the mail address for
|
||
use in mailing a message.
|
||
|
||
** In Shell mode and other comint modes, C-a has now returned to
|
||
its ordinary meaning: move to the beginning of the line.
|
||
Use C-c C-a to move to the end of the prompt.
|
||
|
||
** If you set mail-signature to t to cause automatic insertion of
|
||
your .signature file, you now get a -- before the signature.
|
||
|
||
** Setting rmail-highlighted-headers to nil entirely turns off
|
||
highlighting in Rmail. However, if your motivation for doing this is
|
||
that the highlighted text doesn't look good on your display, it might
|
||
be better to change the appearance of the 'highlight' face. Once
|
||
you've done that, you may find Rmail highlighting is useful.
|
||
|
||
** In the calendar, mouse-2 is now used only for commands that apply to a date.
|
||
If you click it when not on a date, it gives an immediate error.
|
||
|
||
Mouse-3 in the calendar now gives a menu of commands that do not apply
|
||
to a particular date.
|
||
|
||
The D command displays diary entries from a specified diary file (not
|
||
your standard diary file).
|
||
|
||
** In the gnus-uu package, the binding for gnus-uu-threaded-decode-and-view
|
||
is now C-c C-v C-d, not C-c C-v C-h. Thus, C-c C-v C-h is now available
|
||
for asking for a list of the subcommands of C-c C-v.
|
||
|
||
** You can now specify "who you are" for various Emacs packages by
|
||
setting just one variable, 'user-mail-address'. This currently applies
|
||
to posting news with GNUS and to making change log entries. It may
|
||
apply to additional Emacs features in the future.
|
||
|
||
|
||
* Lisp-Level Changes in Emacs 19.26:
|
||
|
||
** The function 'insert-char' now takes an optional third argument
|
||
which, if non-nil, says the inserted characters should inherit sticky
|
||
text properties from the surrounding text.
|
||
|
||
** The 'diary' library has been renamed to 'diary-lib'. If you refer
|
||
to this library in your Lisp code, you must update the references.
|
||
|
||
** Sending text to a subprocess can read input from subprocesses if it
|
||
has to wait because the destination subprocess's terminal input buffer
|
||
is full.
|
||
|
||
It was already possible in unusual occasions for this operation to
|
||
read subprocess input, but it did not happen very often. It is now
|
||
more likely to happen.
|
||
|
||
** last-nonmenu-event is now bound to t around filter functions and sentinels.
|
||
This is to ensure that y-or-n-p and yes-or-no-p use the keyboard by default.
|
||
|
||
** In mode lines, %+ now displays as % for unmodified read-only
|
||
buffers. It is now the same as %* except in the case of a modified
|
||
read-only buffer; in that case, %+ displays as *.
|
||
|
||
The old meaning of %+ is now available on %&.
|
||
It displays * for a modified buffer and - for an unmodified buffer,
|
||
regardless of read-only status.
|
||
|
||
** You can now use 'underline' in the color list of a face.
|
||
It serves as a last resort, and says to underline the face
|
||
(if previous color list elements can't be used).
|
||
|
||
** The new function 'x-color-values' returns the list of color values
|
||
for a given color name (a string). The list contains three integers
|
||
which give the amounts of red, green and blue in the color: (R G B).
|
||
|
||
** In 'run-at-time', 0 as the repeat interval means "don't repeat".
|
||
|
||
** The variable 'trim-versions-without-asking' has been renamed to
|
||
'delete-old-versions'.
|
||
|
||
** The new function 'other-window-for-scrolling' returns the choice of
|
||
other window for C-M-v to scroll.
|
||
|
||
** Note that the function 'fceiling' was mistakenly documented as 'fceil' before.
|
||
|
||
|
||
* Changes in cc-mode.el in Emacs 19.26:
|
||
|
||
** A new syntactic symbol has been added: substatement-open. It
|
||
defines the open brace of a substatement block. These used to get:
|
||
((block-open ...) (substatement . ...)).
|
||
|
||
Non-block substatement lines still get just ((substatement . ...))
|
||
|
||
Note that the custom indent function c-adaptive-block-open has been
|
||
removed as obsolete.
|
||
|
||
** You can now specify the 'hanginess' of closing braces. See
|
||
c-hanging-braces-alist.
|
||
|
||
** Recognizes try and catch blocks in C++. They are given the
|
||
substatement syntactic symbol.
|
||
|
||
** should be generally more forgiving about non-GNU standard top-level
|
||
construct definition styles (i.e. where the function/class/struct
|
||
opening brace does not start in column zero).
|
||
|
||
If you hang the braces that open a top-level construct on the right
|
||
edge, and you find you still need to define defun-open-prompt (Emacs
|
||
19) please let me know. Note that there may still be performance
|
||
issues related to non-column zero opening braces.
|
||
|
||
** c-macro-expand is put on C-c C-e
|
||
|
||
** New style: "Default". Resets indentation to those shipped with
|
||
cc-mode.el.
|
||
|
||
** internal defun c-indent-via-language-element has been renamed
|
||
c-indent-line for compatibility with c-mode.el and 'awk-mode'.
|
||
|
||
** new buffer-local variable 'c-comment-start-regexp' for (potential)
|
||
flexibility in adding new modes based on cc-mode.el
|
||
|
||
|
||
|
||
* Changes in Emacs 19.25
|
||
|
||
The variable x-cross-pointer-shape (which didn't really exist) has
|
||
been renamed to 'x-sensitive-text-pointer-shape', and now does exist.
|
||
|
||
|
||
|
||
* Changes in Emacs 19.24
|
||
|
||
Here is a list of new Lisp packages introduced since 19.22.
|
||
|
||
derived.el Define new major modes based on old ones.
|
||
dired-x.el Extra Dired features.
|
||
double.el New mode for conveniently inputting non-beyond chars.
|
||
easymenu.el Create menus easily.
|
||
ediff.el Snazzy diff interface.
|
||
foldout.el A kind of outline mode designed for editing programs.
|
||
gnus-uu.el UUdecode in GNUS buffers.
|
||
ielm.el Interactively evaluate Lisp.
|
||
This is a replacement for Lisp Interaction Mode.
|
||
iso-cvt.el Conversion of beyond-ASCII characters between
|
||
various different representations.
|
||
jka-compr.el Automatic compression/decompression.
|
||
mldrag.el Drag modeline to change heights of windows.
|
||
mail-hist.el Provides history for headers of outgoing mail.
|
||
rsz-mini.el Automatically resizing minibuffers.
|
||
s-region.el Set region by holding shift.
|
||
skeleton.el Templates for statement insertion.
|
||
soundex.el Classifying words by how they sound.
|
||
tempo.el Template insertion with hotspots.
|
||
|
||
|
||
|
||
* User Editing Changes in 19.23.
|
||
|
||
** Emacs 19.23 uses Ispell version 3.
|
||
|
||
Previous Emacs 19 versions used Ispell version 4. That version had
|
||
improvements in storing the dictionary compactly, but these are not
|
||
very important nowadays. Meanwhile, in parallel to the work on Ispell
|
||
4, many useful features were added to Ispell 3. Until a few months
|
||
ago, the terms on Ispell 3 did not let us use it; but they have now
|
||
been changed, so now we are using it. We are dropping Ispell 4.
|
||
|
||
** Emacs 19.23 can run on MS-DOG. See the file MSDOS in the same
|
||
directory as this file.
|
||
|
||
** Emacs 19.23 can work with an X toolkit. You must specify toolkit
|
||
operation when you configure Emacs: use the option
|
||
--with-x-toolkit=yes. (This option uses code developed by Lucid;
|
||
thanks to Frederic Pierresteguy for helping to adapt it.)
|
||
|
||
** Emacs now has dialog boxes; yes/no and y/n questions automatically
|
||
use them in commands invoked with the mouse. For more information,
|
||
see below under "Lisp programming changes".
|
||
|
||
** Menus now display the keyboard equivalents (if any) of the menu
|
||
commands in parentheses after the menu item.
|
||
|
||
** Kill commands, used in a read-only buffer, now move point across
|
||
the text they would otherwise have killed. This way, you can use
|
||
repeated kill commands to transfer text into the kill ring.
|
||
|
||
** There is now a global mark ring in addition to the mark ring that is local
|
||
to each buffer. The global mark ring stores positions in any buffer. Any
|
||
time the mark is set and the current buffer is different from the last time
|
||
the mark was set, the new mark is pushed on the global mark ring as well.
|
||
The new command C-x C-SPC (pop-global-mark) pops the global mark ring and
|
||
jumps to the last mark pushed, first switching to that buffer.
|
||
|
||
** Query Replace is now available in the Edit menu.
|
||
|
||
** ESC no longer simply exits a Query Replace. It now exits the Query
|
||
Replace and remains pending. Thus, ESC A and M-A are now equivalent
|
||
in Query Replace.
|
||
|
||
To simply exit a Query Replace, type RET or Period.
|
||
|
||
** M-mouse-2 now puts point at the end of the yanked secondary selection.
|
||
|
||
** Mouse-1 in the mode line now simply selects the window above that
|
||
mode line. Mouse-2 in the mode line selects that window and expands
|
||
it to fill the frame it is in.
|
||
|
||
** You can now use mouse-2 in a Dired buffer or Tar mode buffer to find
|
||
a file you click on, in a compilation buffer to go to a particular
|
||
error message, and in a *Occur* buffer to go to a particular
|
||
occurrence.
|
||
|
||
(It was already possible to do likewise in Info and in completion list
|
||
buffers.)
|
||
|
||
What's more, the sensitive areas of the buffer now highlight when you
|
||
move the mouse over them.
|
||
|
||
** In a completion list buffer, the command RET now chooses the completion
|
||
that is around or next to point.
|
||
|
||
** If you specify the foreground color for the 'mode-line' face, and
|
||
mode-line-inverse-video is non-nil, then the default background color
|
||
is the usual foreground color.
|
||
|
||
** revert-buffer now preserves markers pointing within the unchanged
|
||
text (if any) at the beginning and end of the file.
|
||
|
||
** Version control checkin and checkout preserve all markers if the
|
||
file does not contain any of the magic version header sequences that
|
||
are updated automatically by RCS and SCCS. If such version headers
|
||
are present, checkin and checkout preserve a marker unless it comes
|
||
between two such sequences. (So it's a good idea to put all the
|
||
header sequences close together.)
|
||
|
||
** When a large deletion shuts off auto save temporarily in a buffer,
|
||
you can now turn it on again by saving the buffer with C-x C-s (as was
|
||
possible in Emacs 18). You can also turn it on again with M-1 M-x
|
||
auto-save (as has been possible in Emacs 19).
|
||
|
||
** C-x r d now runs the command delete-rectangle.
|
||
|
||
** The new command 'imenu' shows you a menu of interesting places in the
|
||
current buffer and lets you select one; then it moves point there.
|
||
The definition of interesting places depends on the major mode, but
|
||
typically this includes function definitions and such. Normally,
|
||
imenu displays the menu in a buffer; but if you bind it to a mouse
|
||
event, it shows a mouse popup menu.
|
||
|
||
** You can make certain chosen buffers, that normally appear in a
|
||
separate window, appear in special frames of their own. To do this,
|
||
set 'special-display-buffer-names' to a list of buffer names; any buffer
|
||
whose name is in that list automatically gets a special frame when it
|
||
is to be displayed in another window.
|
||
|
||
A good value to try is ("*compilation*" "*grep*" "*TeX Shell*").
|
||
|
||
More generally, you can set 'special-display-regexps' to a list of regular
|
||
expressions; then each buffer whose name matches any of those regular
|
||
expressions gets its own frame.
|
||
|
||
The variable 'special-display-frame-alist' specifies the frame
|
||
parameters for these frames. It has a default value, so you don't
|
||
need to set it.
|
||
|
||
** If you set 'sentence-end-double-space' to nil, the fill commands
|
||
expect just one space at the end of a sentence. (If you want the
|
||
sentence commands to accept single spaces, you must modify the regexp
|
||
'sentence-end' also.)
|
||
|
||
** You can suppress the startup echo area message by adding text like
|
||
this to your .emacs file:
|
||
|
||
(setq inhibit-startup-echo-area-message "YOUR-LOGIN-NAME")
|
||
|
||
Simply setting inhibit-startup-echo-area-message to your login name is
|
||
not sufficient to inhibit the message; Emacs explicitly checks whether
|
||
.emacs contains an expression as shown above. Your login name must
|
||
appear in the expression as a Lisp string constant.
|
||
|
||
This way, you can easily inhibit the message for yourself if you wish,
|
||
but thoughtless copying of your .emacs file will not inhibit the
|
||
message for someone else.
|
||
|
||
** Outline minor mode now uses C-c C-o as a prefix instead of just C-c.
|
||
|
||
** In Outline mode, 'hide-subtree' is now C-c C-d. (It was C-c C-h; but
|
||
that is now a conventional way to ask for help about C-c commands.)
|
||
|
||
** There are two additional commands in Outline mode.
|
||
M-x hide-sublevels
|
||
hides all headers except the topmost N levels.
|
||
M-x hide-other
|
||
hides everything about the body that point is in
|
||
plus the headers leading up from there to the top of the tree.
|
||
|
||
** In iso-transl and iso-insert, the sequences for entering A-ring and
|
||
the AE ligature are now just A and E (plus the initial C-x 8 or Alt).
|
||
You used to have to enter AA or AE, after the C-x 8 prefix of course.
|
||
Likewise for lower case a-ring and ae.
|
||
|
||
** iso-transl now defines convenient Alt keys as well as the C-x 8 prefix.
|
||
Instead of prefixing a sequence with C-x 8, you can add Alt to the
|
||
first character of the sequence. For example, Alt-" a is now a way
|
||
to enter an a-umlaut.
|
||
|
||
** CC mode is a greatly improved mode for C and C++.
|
||
See the following page.
|
||
|
||
** tcl mode is a new major mode. It provides features for
|
||
editing, indenting and running tcl programs.
|
||
|
||
** Compilation minor mode lets you parse error messages in any buffer,
|
||
not just a normal compilation output buffer. Type M-x
|
||
compilation-minor-mode to enable the minor mode; then C-c C-c jumps to
|
||
the source location for the error at point, as in the `*compilation*'
|
||
buffer. If you use compilation-minor-mode in an Rlogin buffer, it
|
||
automatically accesses remote source files by ftp.
|
||
|
||
** Comint and shell mode changes:
|
||
|
||
*** Comint modes (including Shell mode, GUD modes, etc.) now bind
|
||
C-M-l to the command comint-show-output. This command scrolls the
|
||
buffer to show the last batch of output from the subprogram.
|
||
|
||
*** Completion in Comint modes now truly operates on the string before
|
||
point, rather than the word that point is within.
|
||
|
||
*** Comint mode file name completion ignores those files that end with a
|
||
string in the new variable 'comint-completion-fignore'. This variable's
|
||
default value is nil.
|
||
|
||
*** Shell mode uses the variable shell-completion-fignore to set
|
||
comint-completion-fignore. The default value is nil, but some
|
||
people prefer ("~" "#" "%").
|
||
|
||
*** The function 'comint-watch-for-password-prompt' can be used to
|
||
suppress echoing when a subprocess asks for a password. To use it,
|
||
do this:
|
||
|
||
(add-hook 'comint-output-filter-functions
|
||
#'comint-watch-for-password-prompt)
|
||
|
||
*** You can use M-x shell-strip-ctrl-m to strip ^M characters from
|
||
process output.
|
||
|
||
*** In Shell mode, TAB now completes environment variables, if possible,
|
||
and expands directory references.
|
||
|
||
*** You can use M-x comint-run to execute any program of your choice in
|
||
a comint mode. Some programs such as shells, rlogin, and debuggers
|
||
have their own specialized modes; this command is one way to use
|
||
comint to run programs for which no such specialized mode exits. (You
|
||
can also run a shell with M-x shell and run the program of your choice
|
||
under the shell--but that gives you the specializations of Shell
|
||
mode.)
|
||
|
||
** When you run GUD (M-x gdb, M-x dbx, and so on), you can use TAB
|
||
to do file name completion in the minibuffer.
|
||
|
||
The "Complete" menu includes an item for directory expansion.
|
||
|
||
** GUD working with future versions of GDB will permit TAB for
|
||
GDB-style symbol completion. This will work with GDB 4.13.
|
||
|
||
** Rmail no longer gets new mail automatically when you visit an Rmail
|
||
file specified by name--not even if it is your primary Rmail file. To
|
||
get new mail, type 'g'. This feature is an advantage because you now
|
||
have a choice of whether to get new mail. (This change actually
|
||
occurred in an earlier version, but wasn't listed here then, since it
|
||
made the code do what the documentation already said.)
|
||
|
||
** Rmail now highlights certain fields automatically, when you use X
|
||
windows. The variable 'rmail-highlighted-headers' controls which
|
||
fields.
|
||
|
||
** If you set 'rmail-summary-window-size' to an integer, Rmail uses
|
||
a window that many lines high for the summary buffer.
|
||
|
||
** 'rmail-input-menu' is a new command that visits an Rmail file letting
|
||
you choose which file with a mouse menu. 'rmail-output-menu' is
|
||
similar; it outputs the current message, using a mouse menu to choose
|
||
which Rmail file. These commands use the variables
|
||
'rmail-secondary-file-directory' and 'rmail-secondary-file-regexp'.
|
||
|
||
** The mh-e package has been changed substantially.
|
||
See the file ./MH-E-NEWS for details.
|
||
|
||
** The calendar and diary have new features.
|
||
|
||
The menu bar for the calendar contains most of the calendar commands,
|
||
arranged into logical categories.
|
||
|
||
Mouse-2 now performs specific-date-related commands when clicked on a
|
||
date in the calendar window and common three-month-related commands
|
||
when clicked elsewhere in the calendar window.
|
||
|
||
You can set up colored/shaded highlighting of holidays, diary entry
|
||
dates, and today's date, by setting 'calendar-holiday-marker',
|
||
'diary-entry-marker', and 'calendar-today-marker' to a face instead of a
|
||
character. Using a special face is now the default if you are using a
|
||
window system.
|
||
|
||
** The appt package for displaying appointment reminders has new
|
||
features.
|
||
|
||
*** The appt alarm window stays for the full duration of
|
||
'appt-display-duration'. It no longer disappears when you start typing
|
||
text.
|
||
|
||
*** You can change the way the appointment window is created/deleted by
|
||
setting the variables 'appt-disp-window-function' and
|
||
'appt-delete-window-function'.
|
||
|
||
For instance, these variables can be set to functions that display
|
||
appointments in pop-up frames, which are lowered or iconified after
|
||
'appt-display-duration' seconds.
|
||
|
||
** desktop.el can now save a list of buffer-local variables,
|
||
and saves more global ones.
|
||
|
||
** Pascal mode has been completely rewritten. It now features
|
||
completing of function names, variables and type definitions around
|
||
current point (like M-TAB does with lisp-symbols). There's also an
|
||
outline mode (M-x pascal-outline) that hides the bodies of all
|
||
functions you're not working with.
|
||
|
||
** Edebug has a number of changes:
|
||
|
||
*** Edebug syntax error reporting is improved.
|
||
|
||
*** Top-level forms and defining forms other than defun and defmacro may
|
||
now be debugged with Edebug.
|
||
|
||
*** Edebug specifications may now contain body, &define, name, arg or
|
||
arglist, def-body, and def-form, to support definitions.
|
||
|
||
*** edebug-all-defuns is renamed to 'edebug-all-defs'.
|
||
def-edebug-form-spec is replaced by 'def-edebug-form' whose arguments
|
||
are unevaluated. The old names are still available for now.
|
||
|
||
*** Frequency counts and coverage data may be displayed for functions being
|
||
debugged.
|
||
|
||
*** A global break condition is now checked at every stop point.
|
||
|
||
*** The previous condition at a breakpoint may now be edited.
|
||
|
||
*** A new "next" mode stops only after expression evaluation.
|
||
|
||
*** A new command, 'top-level-nonstop', does not even stop for 'unwind-protect',
|
||
as top-level would.
|
||
|
||
|
||
* Changes in CC mode in Emacs 19.23.
|
||
|
||
'cc-mode' provides ANSI C, K&R C, and ARM C++ language editing. It
|
||
represents the merge of c++-mode.el and c-mode.el. cc-mode provides a
|
||
new, more flexible indentation engine so that indentation
|
||
customization is more intuitive. There are two steps to calculating
|
||
indentation: first, CC mode analyzes the line for syntactic content,
|
||
then based on this content it applies user defined offsets and adds
|
||
this offset to the indentation of some previous line.
|
||
|
||
The syntactic analysis determines if the line describes a 'statement',
|
||
'substatement', 'class-open', 'member-init-intro', etc. These are
|
||
described in detail with C-h v c-offsets-alist. You can change the
|
||
offsets interactively with C-c C-o (c-set-offsets), or
|
||
programmatically in your c-mode-common-hook, which is run both by
|
||
c-mode and c++-mode. You can also set up "styles" in the same way
|
||
that you could with c-mode.el. The variable c-basic-offset controls
|
||
the basic offset given to a level of indentation.
|
||
|
||
If, for example, you wanted to change this style:
|
||
|
||
int foo (int i)
|
||
{
|
||
switch (i) {
|
||
case 1:
|
||
printf ("its a foo\n");
|
||
break;
|
||
default:
|
||
printf ("don't know what it is\n");
|
||
break;
|
||
}
|
||
}
|
||
|
||
into this:
|
||
|
||
int foo (int i)
|
||
{
|
||
switch (i) {
|
||
case 1:
|
||
printf ("its a foo\n");
|
||
break;
|
||
default:
|
||
printf ("don't know what it is\n");
|
||
break;
|
||
}
|
||
}
|
||
|
||
you could add the following to your .emacs file:
|
||
|
||
(defun my-c-mode-common-hook ()
|
||
(c-set-offset 'case-label 2)
|
||
(c-set-offset 'statement-case-intro 2))
|
||
(add-hook 'c-mode-common-hook #'my-c-mode-common-hook)
|
||
|
||
** New variables:
|
||
|
||
'c-offsets-alist' contains an association list of syntactic symbols and
|
||
their relative offsets. Do a "C-h v c-offsets-alist" to get a list of
|
||
all syntactic symbols currently defined, and their meanings. You
|
||
should not change this variable directly; use the supplied interface
|
||
commands 'c-set-offset' and 'c-set-style'.
|
||
|
||
'c-mode-common-hook' is run by both 'c-mode' and 'c++-mode' during their
|
||
common initializations. You should put any customizations that are
|
||
the same for both C and C++ into this hook.
|
||
|
||
The variable 'c-strict-semantics-p' is used mainly for debugging. When
|
||
non-nil, CC mode signals an error if it returns a syntactic symbol
|
||
that can't be found in c-offsets-alist.
|
||
|
||
If you want CC mode to echo the syntactic analysis for a particular
|
||
line when you hit the TAB key, set 'c-echo-semantic-information-p' to
|
||
non-nil.
|
||
|
||
'c-basic-offset' controls the standard amount of offset for a level of
|
||
indentation. You can set a syntactic symbol's offset to + or - as a
|
||
short-hand for positive or negative c-basic-offset.
|
||
|
||
'c-comment-only-line-offset' lets you control indentation given to lines
|
||
which contain only a comment, in the case of C++ line style comments,
|
||
or the introduction to a C block comment. Comment-only lines at
|
||
column zero can be anchored there independent of the indentation given
|
||
to other comment-only lines.
|
||
|
||
'c-block-comments-indent-p' controls the style of C block comment
|
||
re-indentation. If you put leading stars in front of comment
|
||
continuation lines, you should set this variable to nil.
|
||
|
||
'c-cleanup-list' is a list describing certain C and C++ constructs to be
|
||
"cleaned up" as they are typed, but only when the auto-newline feature
|
||
is turned on. In C++, make sure this variable contains at least
|
||
'scope-operator so that double colons will not be separated by a
|
||
newline.
|
||
|
||
Colons (':') and braces (`{` and `}') are special in C and C++. For
|
||
certain constructs, you may like them to hang on the right edge of the
|
||
code, or you may like them to start a new line of code. You can use
|
||
the two variables 'c-hanging-braces-alist' and 'c-hanging-colons-alist'
|
||
to control whether newlines are placed before and/or after colons and
|
||
braces when certain C and C++ constructs are entered. For example,
|
||
you can control whether the colon that introduces a C++ member
|
||
initialization list hangs on the right edge, starts a new line, or has
|
||
no newlines either before or after it.
|
||
|
||
'c-special-indent-hook' is run after a line is indented by CC mode. You
|
||
can perform any custom indentations here.
|
||
|
||
'c-delete-function' is the function that is called when a single
|
||
character is deleted with the c-electric-delete command (DEL).
|
||
|
||
'c-electric-pound-behavior' describes what happens when you enter the
|
||
`#' that introduces a cpp macro.
|
||
|
||
If 'c-tab-always-indent' is neither t nor nil, then TAB inserts a tab
|
||
when within strings, comments, and cpp directives, but it reindents
|
||
the line unconditionally.
|
||
|
||
'c-inhibit-startup-warnings-p' inhibits warnings about any old
|
||
version of Emacs you might be running, which could be incompatible
|
||
with cc-mode.
|
||
|
||
** There are two new minor-mode features in CC mode: auto-newline and
|
||
hungry-delete. Auto-newline inserts newlines automatically as you
|
||
type certain constructs. Hungry-delete consumes all preceding
|
||
whitespace (spaces, tabs, and newlines) when the delete key is hit.
|
||
You can toggle auto-newline on and off on a per-buffer basis by
|
||
hitting C-c C-a. You can toggle hungry-delete on and off by hitting
|
||
C-c C-d. You can toggle them both on and off together with C-c C-t.
|
||
|
||
** Slash (`/') and star (`*') are now both electric characters.
|
||
|
||
** New commands:
|
||
|
||
The new C-c C-o (c-set-offset) command can be used to interactively change
|
||
the offset for a particular syntactic symbol.
|
||
|
||
The new command C-c : (c-scope-operator) inserts the C++ scope operator in
|
||
c++-mode only.
|
||
|
||
The new command C-c C-q (c-indent-defun) indents the entire enclosing
|
||
top-level function or class.
|
||
|
||
The new command C-c C-s (c-show-semantic-information) echos the current
|
||
syntactic analysis without re-indenting the current line.
|
||
|
||
The new commands M-x c-forward-into-nomenclature and M-x
|
||
c-backward-into-nomenclature (currently otherwise unbound to a key
|
||
sequence), make movement easier when using the C++ variable naming
|
||
convention of VariableNamesWithoutUnderscoresButEachWordCapitalized.
|
||
|
||
** Command from c-mode.el that have been renamed in cc-mode.el:
|
||
|
||
electric-c-brace => c-electric-brace
|
||
electric-c-semi => c-electric-semi&comma
|
||
electric-c-sharp-sign => c-electric-pound
|
||
mark-c-function => c-mark-function
|
||
electric-c-terminator => c-electric-colon
|
||
indent-c-exp => c-indent-exp
|
||
set-c-style => c-set-style
|
||
|
||
** Variables from c-mode.el that are obsolete with cc-mode.el:
|
||
|
||
c-indent-level
|
||
c-brace-imaginary-offset
|
||
c-brace-offset
|
||
c-argdecl-indent
|
||
c-label-offset
|
||
c-continued-statement-offset
|
||
c-continued-brace-offset
|
||
|
||
|
||
* Lisp programming changes in Emacs 19.23.
|
||
|
||
** To pop up a dialog box, call 'x-popup-dialog'.
|
||
It takes two arguments, POSITION and CONTENTS.
|
||
|
||
POSITION specifies which frame to place the dialog box over;
|
||
the dialog box always goes on the center of the frame.
|
||
POSITION may be a mouse event, a window, a frame,
|
||
or t meaning use the frame that the mouse is in.
|
||
|
||
CONTENTS specifies the contents of the dialog box.
|
||
It looks like a single pane of a popup menu:
|
||
(TITLE ITEM1 ITEM2 ...), where each ITEM has the form (STRING . VALUE).
|
||
The return value is VALUE from the chosen item.
|
||
|
||
An ITEM may also be just a string--that makes a nonselectable item.
|
||
An ITEM may also be nil--that means to put all preceding items
|
||
on the left of the dialog box and all following items on the right.
|
||
(By default, approximately half appear on each side.)
|
||
|
||
If your Emacs is not using an X toolkit, then it cannot display a
|
||
real dialog box; so instead it displays a pop-up menu in the center
|
||
of the frame.
|
||
|
||
** 'y-or-n-p', 'yes-or-no-p' and 'map-y-or-n-p' now use menus or dialog boxes
|
||
to ask their question(s) if the command that is running was reached by
|
||
a mouse event.
|
||
|
||
If you want to control which way these functions work, bind the
|
||
variable 'last-nonmenu-event' around the call. These functions use the
|
||
keyboard if that variable holds a keyboard event (actually, any
|
||
non-list); they use the mouse if that variable holds a mouse event
|
||
(actually, any list).
|
||
|
||
** The mouse-face property is now implemented, both in overlays and as
|
||
a text property. It specifies a face to use when the mouse is in the
|
||
range of text for which the property is specified.
|
||
|
||
** When text has a non-nil 'intangible' property, you cannot move point
|
||
within it or right before it. If you try, point actually moves to the
|
||
end of the intangible text. Note that this means that 'backward-char'
|
||
is a no-op when there is an intangible character to the left of point.
|
||
|
||
** 'minibuffer-exit-hook' is a new normal hook that is run when you
|
||
exit the minibuffer.
|
||
|
||
** The variable 'x-cross-pointer-shape' specifies the cursor shape to use
|
||
when the mouse is over text that has a mouse-face property.
|
||
|
||
** The new variable 'interpreter-mode-alist' specifies major modes to use
|
||
for shell scripts that specify a command interpreter. Its elements
|
||
look like (INTERPRETER . MODE); for example, ("perl" . perl-mode) is
|
||
one element present by default. This feature applies only when the
|
||
file name doesn't indicate which mode to use.
|
||
|
||
** If you use a minibuffer-only frame, set the variable
|
||
'minibuffer-auto-raise' to t, and entering the minibuffer will then
|
||
raise the minibuffer frame.
|
||
|
||
** If 'pop-up-frames' is t, display-buffer now looks for an existing
|
||
window in any visible frame, showing the specified buffer, and uses
|
||
such a window in preference to making a new frame.
|
||
|
||
** In the functions 'next-window', 'previous-window', 'next-frame',
|
||
'previous-frame', 'get-buffer-window', 'get-lru-window', 'get-largest-window'
|
||
and 'delete-windows-on', if you specify 'visible' for the last argument,
|
||
it means to consider all visible frames.
|
||
|
||
** Mouse events now give the X and Y coordinates in pixels, rather than
|
||
in characters. You can convert these values to characters by dividing by
|
||
the values of (frame-char-width) and (frame-char-height).
|
||
|
||
** The new functions 'mouse-pixel-position' and 'set-mouse-pixel-position'
|
||
read and set the mouse position in units of pixels. The existing
|
||
functions 'mouse-position' and 'set-mouse-position' continue to work with
|
||
units of characters.
|
||
|
||
** The new function 'compute-motion' is useful for computing the width
|
||
of certain text when it is displayed.
|
||
|
||
** The function 'vertical-motion' now takes an option second argument WINDOW
|
||
which says which window to use for the display calculations.
|
||
|
||
vertical-motion always operates on the current buffer.
|
||
It is ok to specify a window displaying some other buffer.
|
||
Then vertical-motion uses the width, hscroll and display-table of
|
||
the specified window, but still scans the current buffer.
|
||
|
||
** An error no longer sets 'last-command' to t; the value of last-command
|
||
does reflect the previous command (the one that got an error).
|
||
|
||
If you do not want a particular command to be recognized as the
|
||
previous command in the case where it got an error, you must code that
|
||
command to prevent this. Set this-command to t at the beginning of
|
||
the command, and set this-command back to its proper value at the end,
|
||
like this:
|
||
|
||
(defun foo (args...)
|
||
(interactive ...)
|
||
(setq this-command t)
|
||
...do the work...
|
||
(setq this-command 'foo))
|
||
|
||
or like this:
|
||
|
||
(defun foo (args...)
|
||
(interactive ...)
|
||
(let ((old-this-command this-command))
|
||
(setq this-command t)
|
||
...do the work...
|
||
(setq this-command old-this-command)))
|
||
|
||
The undo and yank commands do this.
|
||
|
||
** If you specify an explicit title for a new frame when you create it,
|
||
the title is used as the resource name when looking up X resources to
|
||
control the shape of that frame. If you don't specify the frame title,
|
||
the value of 'x-resource-name' is used, as before.
|
||
|
||
** The frame parameter user-position, if non-nil, says that the user
|
||
has specified the frame position. Emacs reports this to the window
|
||
manager, to tell it not to override the position that the user
|
||
specified.
|
||
|
||
** Major modes can now set 'change-major-mode-hook' to arrange for state
|
||
to be cleaned up when the user switches to a new major mode. The function
|
||
'kill-all-local-variables' runs this hook. For best results, make the hook a
|
||
buffer-local variable so that it will disappear after doing its job and will
|
||
not interfere with the subsequent major mode.
|
||
|
||
** The new variable 'overriding-local-map', if non-nil, specifies a keymap
|
||
that overrides the current local map, all minor mode keymaps, and all
|
||
text property keymaps. Incremental search uses this feature to override
|
||
all other keymaps temporarily.
|
||
|
||
** A key definition in a menu keymap can now have additional structure:
|
||
in addition to (ITEMNAME [HELPSTRING] . COMMAND) which was allowed
|
||
before, the form (ITEMNAME [HELPSTRING] (...) . COMMAND) is
|
||
allowed. (HELPSTRING is optional, and is not currently used.)
|
||
|
||
Here (...) represents a sublist containing information about keyboard
|
||
key sequences that run the same command COMMAND. Displaying the menu
|
||
automatically creates and updates the sublist when appropriate; you
|
||
need never set these up yourself.
|
||
|
||
'lookup-key', 'key-binding', and similar functions return just COMMAND,
|
||
not the whole binding.
|
||
|
||
To precompute this information for a given keymap, you can do
|
||
(x-popup-menu nil KEYMAP).
|
||
|
||
** When you specify coordinates for x-popup-menu as a list ((XOFFSET
|
||
YOFFSET) WINDOW), the coordinates are now measured in pixels.
|
||
|
||
** where-is-internal now takes just four arguments:
|
||
DEFINITION KEYMAP FIRSTONLY NOINDIRECT.
|
||
The single argument KEYMAP replaces two arguments KEYMAP and KEYMAP1.
|
||
|
||
If KEYMAP is non-nil, where-is-internal searches only KEYMAP and the
|
||
global keymap.
|
||
|
||
If KEYMAP is nil, where-is-internal searches all the currently active
|
||
keymaps, but finds the active keymaps as if overriding-local-map were
|
||
nil.
|
||
|
||
If you pass a list of the form (keymap) as KEYMAP, where-is-internal
|
||
searches only the global map. (This is not a special case--it follows
|
||
from the specifications above.)
|
||
|
||
If you pass the value of overriding-local-map as KEYMAP, where-is-internal
|
||
searches in exactly the same was as command execution does.
|
||
|
||
** Use the macro 'define-derived-mode' to define a new major mode that
|
||
inherits the definition of another major mode. Here's how to define a
|
||
command named hypertext-mode that inherits from the command text-mode:
|
||
|
||
(define-derived-mode hypertext-mode text-mode "Hypertext"
|
||
"Major mode for hypertext.\n\n\\{hypertext-mode-map}"
|
||
(setq case-fold-search nil))
|
||
|
||
(define-key hypertext-mode-map [down-mouse-3] 'do-hyper-link)
|
||
|
||
The new mode has its own keymap, which inherits from that of the
|
||
original mode. It also has its own syntax and abbrev tables, which
|
||
are initialized by copying those of the original mode. It also has
|
||
its own mode hook. All are given names made by appending a suffix
|
||
to the name of the new mode.
|
||
|
||
** A syntax table can now inherit the data for some characters from
|
||
'standard-syntax-table', while specifying other characters itself.
|
||
Syntax code 13 means "inherit this character from the standard syntax
|
||
table." In 'modify-syntax-entry', the character `@' represents this code.
|
||
|
||
The function 'make-syntax-table' now creates a syntax table which
|
||
inherits all letters and control characters (0 to 31 and 128 to 255)
|
||
from the standard syntax table, while copying the other characters
|
||
from the standard syntax table. Most syntax tables in Emacs are set
|
||
up this way.
|
||
|
||
This sort of inheritance is useful for people who set up character
|
||
sets with additional alphabetic characters in the range 128 to 255.
|
||
Just changing the standard syntax for these characters affects all
|
||
major modes.
|
||
|
||
** The new function 'transpose-regions' swaps two regions of the buffer.
|
||
It preserves the markers in those two regions, so that they stay with
|
||
the surrounding text as it is swapped.
|
||
|
||
** 'revert-buffer' now runs 'before-revert-hook' at the beginning and
|
||
'after-revert-hook' at the end. These can be used by minor modes
|
||
that need to clean up state variables.
|
||
|
||
** The new function 'get-char-property' is like 'get-text-property', but
|
||
checks for overlays with properties as well as for text properties.
|
||
It checks for overlays first, in order of descending priority, and
|
||
text properties last.
|
||
|
||
get-char-property allows windows as the OBJECT argument, as well
|
||
as buffers and strings. If you specify a window, then only overlays
|
||
active on that window are considered.
|
||
|
||
** Overlays can have the 'invisible' property.
|
||
|
||
** The function 'insert-file-contents' now takes an optional fifth
|
||
argument called REPLACE. If this is t, it means to replace the
|
||
contents of the buffer (actually, just the accessible portion)
|
||
with the contents of the file.
|
||
|
||
This is better than simply deleting and inserting the whole thing
|
||
because (1) it preserves some marker positions and (2) it puts less
|
||
data in the undo list.
|
||
|
||
** The variable 'inhibit-first-line-modes-regexps' specifies classes of
|
||
file names for which -*- on the first line should not be looked for.
|
||
|
||
** The variables 'before-change-functions' and 'after-change-functions'
|
||
hold lists of functions to call before and after a change in the
|
||
buffer's text. They work much like before-change-function and
|
||
after-change-function, except that they hold a list of functions
|
||
instead of just one.
|
||
|
||
These variables will eventually make 'before-change-function' and
|
||
'after-change-function' obsolete.
|
||
|
||
** The variable 'kill-buffer-query-functions' holds a list of functions
|
||
to be called with no arguments when a buffer is about to be killed.
|
||
(That buffer is the current buffer when the function is called.)
|
||
If any of the functions returns nil, the buffer is not killed
|
||
(and the remaining functions in the list are not called).
|
||
|
||
** The variable 'kill-emacs-query-functions' holds a list of functions
|
||
to be called with no arguments when you ask to exit Emacs.
|
||
If any of the functions returns nil, the exit is canceled
|
||
(and the remaining functions in the list are not called).
|
||
|
||
** The argument for 'buffer-disable-undo' is now optional,
|
||
like the argument for 'buffer-enable-undo'.
|
||
|
||
** The new variable 'system-configuration' holds the canonical three-part
|
||
GNU configuration name for which Emacs was built.
|
||
|
||
** The function 'system-name' now tries harder to return a fully qualified
|
||
domain name.
|
||
|
||
** The variable 'emacs-major-version' holds the major version number
|
||
of Emacs. (Currently 19.)
|
||
|
||
** The variable 'emacs-minor-version' holds the minor version number
|
||
of Emacs. (Currently 23.)
|
||
|
||
** The default value of 'comint-input-autoexpand' is now nil.
|
||
However, Shell mode sets it from the value of shell-input-autoexpand,
|
||
whose default value is 'history'.
|
||
|
||
** The new function 'set-process-window-size' specifies the terminal window
|
||
size for a subprocess. On some systems it sends the subprocess a signal
|
||
to let it know that the size has changed.
|
||
|
||
** %P is a new way to display a percentage in the mode line. It
|
||
displays the percentage of the buffer text that is above the *bottom*
|
||
of the window (which includes the text visible, in the window as well
|
||
as the text above the top). It displays 'Top' as well as the
|
||
percentage if the top of the buffer is visible on screen.
|
||
|
||
** %+ in the mode line specs displays `*' if the buffer is modified,
|
||
and otherwise '-'. It never displays `%', as `%*' would do; whether the
|
||
buffer is read-only has no effect on %+.
|
||
|
||
** The new functions 'ffloor', 'fceiling', 'fround' and 'ftruncate' take a
|
||
floating point argument and return a floating point result whose value
|
||
is a nearby integer. ffloor returns the nearest integer below; fceiling,
|
||
the nearest integer above; ftruncate, the nearest integer in the
|
||
direction towards zero; fround, the nearest integer.
|
||
|
||
** Setting 'print-escape-newlines' to a non-nil value now also makes
|
||
formfeeds print as ``\f''.
|
||
|
||
** 'auto-mode-alist' now has a new feature. If an element has the form
|
||
(REGEXP FUNCTION t), and REGEXP matches the file name, then after calling
|
||
FUNCTION, Emacs deletes the part of the file name that matched REGEXP
|
||
and then searches auto-mode-alist again for a new match.
|
||
|
||
This is useful for uncompression packages. An entry of this sort for
|
||
.gz can uncompress the file and then put the uncompressed file in the
|
||
proper mode according to the name sans .gz.
|
||
|
||
** The new function 'emacs-pid' returns the process ID number of Emacs.
|
||
|
||
** 'user-login-name' now consistently checks the LOGNAME environment
|
||
variable before USER. 'user-original-login-name' is obsolete, since it
|
||
provides the same functionality. To ignore the environment variables,
|
||
use user-real-login-name.
|
||
|
||
** There is a more general way of handling the system-specific X
|
||
keysyms. Set the variable 'system-key-alist' to an alist containing
|
||
elements of the form (CODE . SYMBOL), where CODE is the numeric keysym
|
||
code minus the "vendor specific" bit, and symbol is the name for the
|
||
function key.
|
||
|
||
** You can use the variable 'command-line-functions' to set up functions
|
||
to process unrecognized command line arguments. The variable's value
|
||
should be a list of functions of no arguments. The functions are
|
||
called successively until one of them returns non-nil.
|
||
|
||
Each function should access the free variables 'argi' (the current
|
||
argument) and 'command-line-args-left' (the remaining arguments). The
|
||
function should return non-nil only if it recognizes and processes the
|
||
argument in argi. If it does so, it may consume following arguments
|
||
as well by removing them from command-line-args-left.
|
||
|
||
** There's a new way for a magic file name handler to run a primitive
|
||
and inhibit handling of the file name. Here is how to do it:
|
||
|
||
(let ((inhibit-file-name-handlers
|
||
(cons 'ange-ftp-file-handler
|
||
(and (eq inhibit-file-name-operation operation)
|
||
inhibit-file-name-handlers)))
|
||
(inhibit-file-name-operation operation))
|
||
(apply this-operation args))
|
||
|
||
The function 'find-file-name-handler' now takes two arguments. The
|
||
second argument is OPERATION, the operation for which the handler is
|
||
being sought.
|
||
|
||
People have suggested that the second argument should be optional, for
|
||
backward compatibility. It would be nice if that were possible, but
|
||
it is not. There is simply no way for find-file-name-handler to do
|
||
the right thing without receiving the proper value for its second
|
||
argument.
|
||
|
||
** The variable 'completion-regexp-list' affects the completion
|
||
primitives 'try-completion' and 'all-completions'. They consider
|
||
only the possible completions that match each regexp in the list.
|
||
|
||
** Case conversion in the function 'replace-match' has been changed.
|
||
|
||
The old behavior was this: if any word in the old text was
|
||
capitalized, replace-match capitalized each word of the replacement
|
||
text.
|
||
|
||
The new behavior is this: if the first word in the old text is capitalized,
|
||
replace-match capitalizes the first word of the replacement text.
|
||
|
||
** You can now specify a case table with CANON non-nil and EQV nil.
|
||
Then the EQV part of the case table is deduced from CANON.
|
||
|
||
** The new function 'minibuffer-prompt' takes no arguments and returns
|
||
the current minibuffer prompt string.
|
||
|
||
The new function 'minibuffer-prompt-width' takes no arguments and
|
||
returns the display width of the minibuffer prompt string.
|
||
|
||
** The new function 'frame-first-window' returns the window at the
|
||
upper left corner of a given frame.
|
||
|
||
** 'wholenump' is a new alias for 'natnump'.
|
||
|
||
** The variable 'installation-directory', if non-@code{nil}, names a
|
||
directory within which to look for the 'lib-src' and 'etc'
|
||
subdirectories. This is non-nil when Emacs can't find those
|
||
directories in their standard installed locations, but can find them
|
||
near where the Emacs executable was found.
|
||
|
||
** 'invocation-name' and 'invocation-directory' are now variables as well
|
||
as functions. The variable values are the same values that the
|
||
functions return: the Emacs program name sans directories, and the
|
||
directory it was found in. (invocation-directory may be nil, if Emacs
|
||
can't determine which directory it should be.)
|
||
|
||
** Installation change regarding version number counting.
|
||
|
||
The version number of an Emacs executable contains three numbers.
|
||
The first two describe the Emacs release and the third increments
|
||
each time you build Emacs.
|
||
|
||
Now the file version.el contains only the first two version numbers.
|
||
The third component is now determined on the basis of the names of the
|
||
existing executable files. This means that version.el is not altered
|
||
by building Emacs.
|
||
|
||
** New macro 'easy-menu-define'
|
||
|
||
|
||
* Changes in 19.22.
|
||
|
||
** The mouse click M-mouse-2 now inserts the current secondary
|
||
selection (from Emacs or any other X client) where you click.
|
||
It does not move point.
|
||
This command is called 'mouse-yank-secondary'.
|
||
|
||
'mouse-kill-secondary' no longer has a key binding by default.
|
||
Clicking M-mouse-3 (mouse-secondary-save-then-kill) twice
|
||
may be a convenient enough way of killing the secondary selection.
|
||
Or perhaps there should be a keyboard binding for killing the
|
||
secondary selection. Any suggestions?
|
||
|
||
** New packages:
|
||
|
||
*** 'icomplete' provides character-by-character information
|
||
about what you could complete if you type TAB.
|
||
|
||
*** 'avoid' moves the mouse away from point so that it doesn't hide
|
||
your typing.
|
||
|
||
*** 'shadowfile' helps you update files that are supposed to be stored
|
||
identically in different places (perhaps on different machines).
|
||
|
||
** C-h p now knows about four additional keywords: data, faces, mouse,
|
||
and matching.
|
||
|
||
** The key for starting an inferior Lisp process, in Lisp mode,
|
||
is now C-c C-z instead of C-c C-l.
|
||
|
||
** When the VC commands ask whether to save the buffer, if you say no,
|
||
they signal an error. This is so that you won't operate on the wrong
|
||
data.
|
||
|
||
** ISO Accents mode now supports `"s' as a way of typing German sharp s.
|
||
|
||
** By default, comint buffers (including Shell mode and debuggers)
|
||
no longer try to scroll to keep the cursor on the bottom line.
|
||
This feature was added in 19.21 but did not work smoothly enough.
|
||
|
||
** Emacs now handles the window manager "delete window" operation.
|
||
|
||
** Display of buffers with text properties is much faster now.
|
||
|
||
** The feature previously announced whereby 'insert' does not inherit
|
||
text properties from surrounding text was not fully implemented
|
||
before; but now it is. use 'insert-and-inherit' if you wish to
|
||
inherit sticky properties from the surrounding text.
|
||
|
||
** The functions 'next-property-change', 'previous-property-change',
|
||
'next-single-property-change', and 'previous-single-property-change'
|
||
now take one additional optional argument LIMIT that is a position at
|
||
which to stop scanning. If scan ends without finding the property
|
||
change sought, these functions return the specified limit.
|
||
|
||
The value returned by previous-single-property-change and
|
||
previous-property-change, when they do find a change, is now one
|
||
greater than what it used to be. It is the position between the two
|
||
characters whose properties differ, which is one greater than the
|
||
position of the first character found (while scanning back) with
|
||
different properties.
|
||
|
||
|
||
|
||
* User editing changes in version 19.21.
|
||
|
||
** ISO Accents mode supports four additional characters:
|
||
A-with-ring (entered as /A), AE ligature (entered as /E),
|
||
and their lower-case equivalents.
|
||
|
||
|
||
|
||
* User editing changes in version 19.20.
|
||
(See following page for Lisp programming changes.)
|
||
|
||
Note that some of these changes were made subsequent to the Emacs 19.20
|
||
editions of the Emacs manual and Emacs Lisp manual; therefore, if you
|
||
have those editions, do read this page.
|
||
|
||
** Dragging with mouse button 1 now puts the selected region
|
||
in the kill ring so you can paste it into other X applications.
|
||
|
||
** Double and triple clicks with button 1 now behave as in xterm,
|
||
selecting the word or line surrounding where you click. If you drag
|
||
after the last click, you can select a range of words or lines.
|
||
|
||
** You can use button 3 to extend a mouse-selected region, as in xterm.
|
||
This works for regions selected either by dragging Mouse-1 or by
|
||
multiple-clicking Mouse-1. Clicking Mouse-3 moves the end of the
|
||
region that is (initially) nearer to where you click.
|
||
|
||
If the selection was first made by multiple-clicking Mouse-1, and thus
|
||
consists of entire words or lines, Mouse-3 preserves that state.
|
||
|
||
As before, clicking Mouse-3 again in the same place kills the region
|
||
thus selected.
|
||
|
||
** The secondary selection commands, M-Mouse-1 and M-Mouse-3, have been
|
||
likewise modified.
|
||
|
||
** You can now search for strings and regexps using the Edit menu bar menu.
|
||
|
||
** You can now access bookmarks using the Bookmark submenu in the File
|
||
menu in the menu bar.
|
||
|
||
** ISO Accents mode, a buffer-local minor mode, provides a convenient
|
||
way to type certain non-ASCII characters. It makes the characters `,
|
||
', ", ^, ~ and / serve as modifiers for the following letter. ` and '
|
||
add accents, " adds an umlaut or dieresis, ^ adds a circumflex, ~
|
||
adds a tilde, and / adds a slash to the following letter.
|
||
|
||
If the following character is not a letter, or cannot be modified as
|
||
requested, then both characters stand for themselves. If you
|
||
duplicate the modifier accent character, that enters the corresponding
|
||
ISO non-spacing accent character (thus, '' enters the ISO acute-accent
|
||
character). To enter a modifier character itself, type it followed by
|
||
a space.
|
||
|
||
This feature can be used whenever a key sequence is expected: for
|
||
ordinary insertion, for searching, and for certain command arguments.
|
||
|
||
A few special combinations:
|
||
|
||
~c => c with cedilla
|
||
~d => d with stroke
|
||
~< => left guillemot
|
||
~> => right guillemot
|
||
|
||
** iso-transl.el is a new library that replaces iso-insert.el.
|
||
It defines C-x 8 as an insertion prefix for the ISO characters
|
||
between 128 and 255, much like iso-insert, except that iso-transl
|
||
works even in searches and help commands--wherever a key sequence
|
||
is expected.
|
||
|
||
To define case-conversion for these characters for ISO 8859/1,
|
||
load the library iso-syntax. (This is not new.)
|
||
|
||
** M-TAB in Text mode now runs the command 'ispell-complete-word'
|
||
which performs completion using the spelling dictionary.
|
||
|
||
The spelling correction submenu now includes this command
|
||
and another command which completes a word fragment (that is,
|
||
it doesn't assume that the text to be completed starts at the
|
||
beginning of a word.
|
||
|
||
** In incremental search, you can use M-y to yank the most recent kill
|
||
into the search string.
|
||
|
||
** The new function 'ispell-message' checks the spelling of a message
|
||
you are about to send or post. It ignores text cited from other
|
||
messages.
|
||
|
||
To automatically check all your outgoing messages, include the
|
||
following line in your .emacs file:
|
||
(setq news-inews-hook (setq mail-send-hook 'ispell-message))
|
||
|
||
** There is now a separate minibuffer history list for the names of
|
||
extended commands. This history list is used by M-x when reading
|
||
the command name. The motivation for this is to prevent command
|
||
names from appearing in the history used for other minibuffer
|
||
arguments.
|
||
|
||
Note that the history list for entire commands that use the minibuffer
|
||
is a separate feature. That history list records a command with all
|
||
its arguments, and you must use C-x ESC ESC to access it.
|
||
|
||
** You can use the new command C-x v ~ VERSION RET to examine a
|
||
specified version of a file that is maintained with version control.
|
||
|
||
** In Indented Text mode, only blank lines now separate paragraphs.
|
||
Indented lines continue the paragraph that is in progress. This makes
|
||
the user option variable adaptive-fill-mode have its intended effect.
|
||
|
||
** Local variable specifications in files for variables whose names end
|
||
in '-hook' and '-function' are now controlled by the variable
|
||
'enable-local-eval', just like the 'eval' variable.
|
||
|
||
** C-x r j (jump-to-register) when restoring a frame configuration now
|
||
makes all unwanted frames (existing frames not mentioned in the
|
||
configuration) invisible.
|
||
|
||
If you want to delete these unwanted frames, use a prefix argument for
|
||
C-x r j.
|
||
|
||
** You can customize the calendar to display weeks beginning on
|
||
Monday: set the variable 'calendar-week-start-day' to 1.
|
||
|
||
** Rmail changes.
|
||
|
||
If you save messages to a file in Unix format while viewing a message
|
||
with its whole header, this now copies to the file the entire header
|
||
of each message copied.
|
||
|
||
** Comint mode changes.
|
||
|
||
C-c C-e shows as much output as possible in the window.
|
||
C-c RET copies an old input (the one at point)
|
||
and places the copy after the latest prompt.
|
||
C-c C-p and C-c C-n move through the buffer, stopping at places
|
||
where the subshell prompted for input.
|
||
C-c C-h lists the input history in a `*Help*' buffer.
|
||
|
||
There are new menu bar items for completion/input/output/signal commands.
|
||
|
||
Input behavior is configurable. Variables control whether some windows
|
||
showing the buffer scroll to the bottom before insertion. These are
|
||
'comint-scroll-to-bottom-on-input' and 'before-change-function'. By default,
|
||
insertion causes the selected window to scroll to the bottom before insertion
|
||
occurs.
|
||
|
||
Subprocess output now keeps point at the end of the buffer in each
|
||
window individually if point was already at the end of the buffer in
|
||
that window.
|
||
|
||
If 'comint-scroll-show-maximum-output' is non-nil (which is the
|
||
default), then scrolling due to arrival of output tries to place the
|
||
last line of text at the bottom line of the window, so as to show as
|
||
much useful text as possible. (This mimics the scrolling behavior of
|
||
many terminals.)
|
||
|
||
By setting 'comint-scroll-to-bottom-on-output', you can opt for having
|
||
point jump to the end of the buffer whenever output arrives--no matter
|
||
where in the buffer point was before. If the value is 'this', point
|
||
jumps in the selected window. If the value is 'all', point jumps in
|
||
each window that shows the comint buffer. If the value is 'other',
|
||
point jumps in all nonselected windows that show the current buffer.
|
||
The default value is nil, which means point does not jump to the end.
|
||
|
||
Input history insertion is configurable. A variable controls whether only the
|
||
first instance of successive identical inputs is stored in the input history.
|
||
This is 'comint-input-ignoredups'.
|
||
|
||
Completion (bound to TAB) is now more general. Depending on context,
|
||
completion now operates on the input history, on command names, or (as
|
||
before) on filenames.
|
||
|
||
Filename completion is configurable. Variables control whether
|
||
file/directory suffix characters are added ('comint-completion-addsuffix'),
|
||
whether shortest completion is acceptable when no further unambiguous
|
||
completion is possible ('comint-completion-recexact'), and the timing of
|
||
completion candidate listing ('comint-completion-autolist').
|
||
|
||
Comint mode now provides history expansion. Insert input using `!'
|
||
and `^', in the same syntax that typical shells use; then type TAB.
|
||
This searches the comint input history for a matching element,
|
||
performs substitution if necessary, and places the result in the
|
||
comint buffer in place of the original input.
|
||
|
||
History references in the input may be expanded before insertion into
|
||
the input ring, or on input to the interpreter (and therefore
|
||
visibly). The variable 'comint-input-autoexpand' specifies which.
|
||
|
||
You can make the SPC key perform history expansion by binding
|
||
SPC to the command 'comint-magic-space'.
|
||
|
||
The command 'comint-dynamic-complete-variable' does variable name
|
||
completion using the environment variables as set within Emacs. The
|
||
variables controlling filename completion apply to variable name
|
||
completion too. This command is normally available through the menu
|
||
bar.
|
||
|
||
** Shell mode
|
||
|
||
Paragraph motion and marking commands (default bindings M-{, M-}, M-h) operate
|
||
on output groups (i.e., shell prompt plus associated shell output).
|
||
|
||
TAB now completes commands, as well as file names and expand history.
|
||
Commands are searched for along the path that Emacs has on startup.
|
||
|
||
C-c C-f now moves forward a command ('shell-forward-command') and
|
||
C-c C-b now moves backward a command ('shell-backward-command').
|
||
|
||
Command completion is configurable. The variables controlling
|
||
filename completion in comint mode apply, together with a variable
|
||
controlling whether to restrict possible completions to only files
|
||
that are executable ('shell-command-execonly').
|
||
|
||
The input history is initialized from the file name given in the
|
||
variable 'shell-input-ring-file-name'--normally `.history' in your
|
||
home directory.
|
||
|
||
Directory tracking is more robust. It can cope with command sequences
|
||
and forked commands, and can detect the failure of directory changing
|
||
commands in most circumstances. It's still not infallible, of course.
|
||
|
||
You can now configure the behavior of 'pushd'. Variables control
|
||
whether 'pushd' behaves like 'cd' if no argument is given
|
||
('shell-pushd-tohome'), pop rather than rotate with a numeric argument
|
||
('shell-pushd-dextract'), and only add directories to the directory
|
||
stack if they are not already on it ('shell-pushd-dunique'). The
|
||
configuration you choose should match the underlying shell, of course.
|
||
|
||
|
||
* Emacs Lisp programming changes in Emacs 19.20.
|
||
|
||
** A new function 'remove-hook' is now used to remove a hook that you might
|
||
have added with 'add-hook'.
|
||
|
||
** There is now a Lisp pretty-printer in the library 'pp'.
|
||
|
||
** The partial Common Lisp support has been entirely reimplemented.
|
||
|
||
** When you insert text using 'insert', 'insert-before-markers' or
|
||
'insert-buffer-substring', text properties are no longer inherited
|
||
from the surrounding text.
|
||
|
||
When you want to inherit text properties, use the new functions
|
||
'insert-and-inherit' or 'insert-before-markers-and-inherit'.
|
||
|
||
The self-inserting character command does do inheritance.
|
||
|
||
** Frame creation hooks.
|
||
|
||
The function 'make-frame' now runs the normal hooks
|
||
'before-make-frame-hook' and 'after-make-frame-hook'.
|
||
|
||
** You can now use 'function-key-map' to make a key an alias for other
|
||
key sequences that can vary depending on circumstances. To do this,
|
||
give the key a definition in function-key-map which is a function
|
||
rather than a specific expansion key sequence.
|
||
|
||
If the function reads input itself, it can have the effect of altering
|
||
the event that follows. For example, here's how to define C-c h to
|
||
turn the character that follows into a hyper character:
|
||
|
||
(define-key function-key-map "\C-ch" 'hyperify)
|
||
|
||
(defun hyperify (prompt)
|
||
(let ((e (read-event)))
|
||
(vector (if (numberp e)
|
||
(logior (ash 1 20) e)
|
||
(if (memq 'hyper (event-modifiers e))
|
||
e
|
||
(add-event-modifier "H-" e))))))
|
||
|
||
(defun add-event-modifier (string e)
|
||
(let ((symbol (if (symbolp e) e (car e))))
|
||
(setq symbol (intern (concat string (symbol-name symbol))))
|
||
(if (symbolp e)
|
||
symbol
|
||
(cons symbol (cdr e)))))
|
||
|
||
The character translation function gets one argument, which is the
|
||
prompt that was specified in read-key-sequence--or nil if the key
|
||
sequence is being read by the editor command loop. In most cases
|
||
you can just ignore the prompt value.
|
||
|
||
** Changes for reading and writing text properties.
|
||
|
||
New low-level Lisp features make it possible to write Lisp programs to
|
||
save text properties in files, and read text properties from files.
|
||
You can program any file format you like.
|
||
|
||
The variable 'write-region-annotation-functions' should contain a list
|
||
of functions to be run by 'write-region' to encode text properties in
|
||
some fashion as annotations to the text that is written.
|
||
|
||
Each function in the list is called with two arguments: the start and
|
||
end of the region to be written. These functions should not alter the
|
||
contents of the buffer. Instead, they should return lists indicating
|
||
annotations to write in the file in addition to the text in the
|
||
buffer.
|
||
|
||
Each function should return a list of elements of the form (POSITION
|
||
. STRING), where POSITION is an integer specifying the relative
|
||
position in the text to be written, and STRING is the annotation to
|
||
add there.
|
||
|
||
Each list returned by one of these functions must be already sorted in
|
||
increasing order by POSITION. If there is more than one function,
|
||
'write-region' merges the lists destructively into one sorted list.
|
||
|
||
When 'write-region' actually writes the text from the buffer to the
|
||
file, it intermixes the specified annotations at the corresponding
|
||
positions. All this takes place without modifying the buffer.
|
||
|
||
The variable 'after-insert-file-functions' should contain a list of
|
||
functions to be run each time a file's contents have been inserted into
|
||
a buffer. Each function receives one argument, the length of the
|
||
inserted text; point indicates the start of that text. The function
|
||
should make whatever changes it wants to make, then return the updated
|
||
length of the inserted text, as it stands after those changes. The
|
||
value returned by one function is used as the argument to the next.
|
||
These functions should always return with point at the beginning of
|
||
the inserted text.
|
||
|
||
The intended use of 'after-insert-file-functions' is for converting
|
||
some sort of textual annotations into actual text properties. But many
|
||
other uses may be possible.
|
||
|
||
We now invite users to begin implementing Lisp programs to store and
|
||
retrieve text properties in files, using these new primitive features,
|
||
and thus to experiment with various data formats and find good ones.
|
||
|
||
We suggest not trying to handle arbitrary Lisp objects as property
|
||
names or property values--because a program that general is probably
|
||
difficult to write, and slow. Instead, choose a set of possible data
|
||
types that are reasonably flexible, and not too hard to encode.
|
||
|
||
** Comint completion.
|
||
|
||
Currently comint-dynamic-complete-command (and associated variable
|
||
comint-after-partial-pathname-command) are set by default to complete a
|
||
filename. Other comint-mode users should have their own functions to achieve
|
||
this. For example, gud-mode could complete debugger commands. A completion
|
||
function is provided solely for this reason (comint-dynamic-simple-complete).
|
||
|
||
Other comint-mode users should bind comint-dynamic-complete (shell-mode does
|
||
already).
|
||
|
||
** Comint history reference expansion
|
||
|
||
Currently comint-input-autoexpand is 'history, which means only expand
|
||
history on insertion to comint-input-ring. For non-shell modes, this is
|
||
a strange default, since non-shells will not understand history references.
|
||
Perhaps it would be better for the variable to be 'input, which means expand
|
||
on RET.
|
||
|
||
The value 'history might possibly be wrong even for shells, since the
|
||
expansion will be done both by comint and the underlying shell (except sh, of
|
||
course). It would be better for expansion to be done by one or the other,
|
||
not both since they may (ahem) disagree. Since it is silly to put a literal
|
||
history reference into comint-input-ring, perhaps it would be better for the
|
||
variable to be 'input too.
|
||
|
||
The reason the variable is not 'input by default is that I was attempting to
|
||
adhere to The Principle of Least Astonishment. I didn't want to shock users
|
||
by having their input change in front of their eyes.
|
||
|
||
** Argument delimiters and Comint mode.
|
||
|
||
Currently comint-delimiter-argument-list is '(), which means no strings are
|
||
to be treated as delimiters and arguments. In shell-mode, this variable is
|
||
set to shell-delimiter-argument-list, '("|" "&" "<" ">" "(" ")" ";"). Other
|
||
comint-mode users should set this variable too. For example, a lisp-type
|
||
mode might want to set this to '("." "(" ")") or some such.
|
||
|
||
** Comint output hook.
|
||
|
||
There is now a hook, 'comint-output-filter-hook', that is run by the
|
||
output filter, 'comint-output-filter'. This is useful for scrolling (see
|
||
below), but also things like processing output for specific text, output
|
||
highlighting, etc.
|
||
|
||
So that such output processing may be done efficiently, there is a new
|
||
variable, 'comint-last-output-start', that records the position of the start of
|
||
the last output inserted into the buffer (effectively the previous value
|
||
of process-mark). Output processing functions should process the text
|
||
between 'comint-last-output-start' (or perhaps the beginning of the line that
|
||
the position lies on) and process-mark.
|
||
|
||
** Comint scrolling.
|
||
|
||
There is now automatic scrolling of process windows.
|
||
|
||
Currently comint-scroll-show-maximum-output is t, which means when scrolling
|
||
output put process-mark at the bottom of the window. There is a good case
|
||
for it to be t, since the user is likely to want to see as much output as
|
||
possible. But, then again, there is a comint-show-maximum-output command.
|
||
|
||
** Comint history retrieval.
|
||
|
||
The input following point is not deleted when moving around the input history
|
||
(with M-p etc.). Emacs maintainers may not like this. However, I feel this
|
||
is a useful feature. The simple remedy is to put 'end-of-line' in before
|
||
'delete-region' in 'comint-previous-matching-input'.
|
||
|
||
The input history retrieval commands still wrap-around the input ring, unlike
|
||
Emacs command history.
|
||
|
||
|
||
|
||
* Changes in version 19.19.
|
||
|
||
** The new package bookmark.el records named bookmarks: positions that
|
||
you can jump to. Bookmarks are saved automatically between Emacs
|
||
sessions.
|
||
|
||
** Another simpler package saveplace.el records your position in each
|
||
file when you kill its buffer (or kill Emacs), and jumps to the same
|
||
position when you visit the file again (even in another Emacs
|
||
session). Use 'toggle-save-place' to turn on place-saving in a given file;
|
||
use (setq-default save-place t) to turn it on for all files.
|
||
|
||
** In Outline mode, you can now customize how to compute the level of a
|
||
heading line. Set 'outline-level' to a function of no arguments which
|
||
returns the level, assuming point is at the beginning of a heading
|
||
line.
|
||
|
||
** You can now specify the prefix key to use for Outline minor mode.
|
||
(The default is C-c.) Set the variable 'outline-minor-mode-prefix' to
|
||
the key sequence you want to use (as a string or vector).
|
||
|
||
** In Bibtex mode, C-c e has been changed to C-c C-b. This is because
|
||
C-c followed by a letter is reserved for users.
|
||
|
||
** The 'mod' function is no longer an alias for `%', but is a separate function
|
||
that yields a result with the same sign as the divisor. 'floor' now takes an
|
||
optional second argument, which divides the first argument before the floor is
|
||
taken.
|
||
|
||
** `%' no longer allows floating point arguments, since the results were often
|
||
inconsistent with integer `%'.
|
||
|
||
|
||
|
||
* Changes in version 19.18.
|
||
|
||
** Typing C-z in an iconified Emacs frame now deiconifies it.
|
||
|
||
** hilit19 is a new library for automatic highlighting of parts of the
|
||
text in the buffer, based on its meaning and context.
|
||
|
||
** Killing no longer sends the killed text to the X clipboard.
|
||
And large strings are not put in the cut buffer either.
|
||
The variable x-cut-buffer-max specifies the maximum number of characters
|
||
to put in the cut buffer.
|
||
|
||
** The new command C-x 5 o (other-frame) selects different frames,
|
||
successively, in cyclic order. It does for frames what C-x o
|
||
does for windows.
|
||
|
||
** The command M-ESC (eval-expression) has its own command history.
|
||
|
||
** The commands M-! and M-| for running shell commands have their own
|
||
command history.
|
||
|
||
** If the directory containing the Emacs executable has a sibling named
|
||
'lisp', that 'lisp' directory is added to the end of 'load-path'
|
||
(provided you don't override the normal value with the EMACSLOADPATH
|
||
environment variable). This feature may make it easier to move
|
||
an installed Emacs from place to place.
|
||
|
||
** M-x validate-tex-buffer now records the locations of mismatches
|
||
found in the `*Occur*' buffer. You can go to that buffer and type C-c
|
||
C-c to visit a particular mismatch.
|
||
|
||
** There are new commands in Shell mode.
|
||
|
||
C-c C-n and C-c C-p move point to the next or previous shell input line.
|
||
|
||
C-c C-d is now another way to send an end-of-file to the subshell.
|
||
|
||
** Changes to calendar/diary.
|
||
|
||
Time zone data is now determined automatically, including the
|
||
start/stop days and times of daylight saving time. The code now
|
||
works correctly almost anywhere in the world.
|
||
|
||
The format of the holiday specifications has changed and IS NO LONGER
|
||
COMPATIBLE with the old (version 18) format. See the documentation of
|
||
the variable calendar-holidays for details of the new, improved
|
||
format.
|
||
|
||
The hook 'diary-display-hook' has been split into two:
|
||
diary-display-hook which should be used ONLY for the display and
|
||
'diary-hook' which should be used for appointment notification. If
|
||
diary-display-hook is nil (the default), simple-diary-display is
|
||
used. This allows the diary hooks to be correctly set with add-hook.
|
||
|
||
The forms used for dates in diary entries and general display are no
|
||
longer autoloaded, but set at load time; this means they will be set
|
||
correctly based on values you assign to various variables.
|
||
|
||
** The functions x-rebind-key and x-rebind-keys have been deleted,
|
||
because you can accomplish the same job by binding keys to keyboard
|
||
macros.
|
||
|
||
** Emacs now distinguishes double and triple drag events and double and
|
||
triple button-down events. These work analogously to double and
|
||
triple click events.
|
||
|
||
Double drag events, if not defined, convert to ordinary click events.
|
||
Double down events, if not defined, convert first to ordinary down
|
||
events, which are then discarded if not defined. Triple events that
|
||
are not defined convert to the corresponding double event; if that is
|
||
also not defined, it may convert further.
|
||
|
||
** The new function 'event-click-count' returns the number of clicks,
|
||
from an event which is a list. It is 1 for an ordinary click, drag,
|
||
or button-down event, 2 for a double event, and 3 or more for a triple
|
||
event.
|
||
|
||
** The new function 'previous-frame' is like 'next-frame', but moves
|
||
around through the set of existing frames in the opposite order.
|
||
|
||
** The 'post-command-hook' now runs even after commands that get an error
|
||
and return to top level. As a consequence of the same change, this
|
||
hook also runs before Emacs reads the first command. That might sound
|
||
paradoxical, as if this hook were the same as the 'pre-command-hook'.
|
||
Actually, they are not similar; the latter runs before *execution* of
|
||
a command, but after it has been read.
|
||
|
||
** You can turn off the text property hooks that run when point moves
|
||
to certain places in the buffer, by binding 'inhibit-point-motion-hooks'
|
||
to a non-nil value.
|
||
|
||
** Inserting a string with no text properties into the buffer normally
|
||
inherits the properties of the preceding character. You can now
|
||
control this inheritance by setting the front-sticky and
|
||
rear-nonsticky properties of a character.
|
||
|
||
If you make a character's front-sticky property t, then insertion
|
||
before the character inherits its properties. If you make the
|
||
rear-nonsticky property t, then insertion after the character does not
|
||
inherit its properties. You can regard characters as normally being
|
||
rear-sticky and not front-sticky, and this is why insertion normally
|
||
inherits from the previous character.
|
||
|
||
If neither side of an insertion is suitably sticky, then the inserted
|
||
text gets no properties. If both sides are sticky, then the inserted
|
||
text gets the properties of both sides, with the previous character's
|
||
properties taking precedence when both sides have a property in
|
||
common.
|
||
|
||
You can also specify stickiness for individual properties. To do so,
|
||
use a list of property names as the value of the front-sticky property
|
||
or the rear-nonsticky property. For example, if a character has a
|
||
rear-nonsticky property whose value is (face read-only), then
|
||
insertion after the character will not inherit its face property or
|
||
read-only property (if any), but will inherit any other properties.
|
||
|
||
The merging of properties when both sides of the insertion are sticky
|
||
takes place one property at a time. If the preceding character is
|
||
rear-sticky for the property, and the property is non-nil, it
|
||
dominates. Otherwise, the following character's property value is
|
||
used if it is front-sticky for that property.
|
||
|
||
** If you give a character a non-nil 'invisible' text property, the
|
||
character does not appear on the screen. This works much like
|
||
selective display.
|
||
|
||
The details of this feature are likely to change in future Emacs
|
||
versions.
|
||
|
||
** In Info, when you go to a node, it runs the normal hook
|
||
Info-selection-hook.
|
||
|
||
** You can use the new function 'invocation-directory' to get the name
|
||
of the directory containing the Emacs executable that was run.
|
||
|
||
** Entry to the minibuffer runs the normal hook 'minibuffer-setup-hook'.
|
||
|
||
** The new function 'minibuffer-window-active-p' takes one argument, a
|
||
minibuffer window, and returns t if the window is currently active.
|
||
|
||
|
||
|
||
* Changes in version 19.17.
|
||
|
||
** When Emacs displays a list of completions in a buffer,
|
||
you can select a completion by clicking mouse button 2
|
||
on that completion.
|
||
|
||
** Use the command 'list-faces-display' to display a list of
|
||
all the currently defined faces, showing what they look like.
|
||
|
||
** Menu bar items from local maps now come after the usual items.
|
||
|
||
** The Help menu bar item always comes last in the menu bar.
|
||
|
||
** If you enable Font-Lock mode on a buffer containing a program
|
||
(certain languages such as C and Lisp are supported), everything you
|
||
type is automatically given a face property appropriate to its
|
||
syntactic role. For example, there are faces for comments, string
|
||
constants, names of functions being defined, and so on.
|
||
|
||
** Dunnet, an adventure game, is now available.
|
||
|
||
** Several major modes now have their own menu bar items,
|
||
including Dired, Rmail, and Sendmail. We would like to add
|
||
suitable menu bar items to other major modes.
|
||
|
||
** The key binding C-x a C-h has been eliminated.
|
||
This is because it got in the way of the general feature of typing
|
||
C-h after a prefix character. If you want to run
|
||
'inverse-add-global-abbrev', you can use C-x a - or C-x a i g instead.
|
||
|
||
** If you set the variable 'rmail-mail-new-frame' to a non-nil value,
|
||
all the Rmail commands to send mail make a new frame to do it in.
|
||
When you send the message, or use the menu bar command not to send it,
|
||
that frame is deleted.
|
||
|
||
** In Rmail, the o and C-o commands are now almost interchangeable.
|
||
Both commands check the format of the file you specify, and append
|
||
the message to it in Rmail format if it is an Rmail file, and in
|
||
inbox file format otherwise. C-o and o are different only when you
|
||
specify a new file.
|
||
|
||
** The function 'copy-face' now takes an optional fourth argument
|
||
NEW-FRAME. If you specify this, it copies the definition of face
|
||
OLD-FACE on frame FRAME to face NEW-NAME on frame NEW-FRAME.
|
||
|
||
** A local map can now cancel out one of the global map's menu items.
|
||
Just define that subcommand of the menu item with 'undefined'
|
||
as the definition. For example, this cancels out the 'Buffers' item
|
||
for the current major mode:
|
||
|
||
(local-set-key [menu-bar buffer] 'undefined)
|
||
|
||
** To put global items at the end of the menu bar, use the new variable
|
||
'menu-bar-final-items'. It should be a list of symbols--event types
|
||
bound in the menu bar. The menu bar items for these symbols are
|
||
moved to the end.
|
||
|
||
** The list returned by 'buffer-local-variables' now contains cons-cell
|
||
elements of the form (SYMBOL . VALUE) only for buffer-local variables
|
||
that have values. For unbound buffer-local variables, the variable
|
||
name (symbol) appears directly as an element of the list.
|
||
|
||
** The 'modification-hooks' property of a character no longer affects
|
||
insertion; it runs only for deletion and modification of the character.
|
||
|
||
To detect insertion, use 'insert-in-front-hooks' and
|
||
'insert-behind-hooks' properties. The former runs when text is
|
||
inserted immediately preceding the character that has the property;
|
||
the latter runs when text is inserted immediately following the
|
||
character.
|
||
|
||
** Buffer modification now runs hooks belonging to overlays as well as
|
||
hooks belonging to characters. If an overlay has a
|
||
'modification-hooks' property, it applies to any change to text in the
|
||
overlay, and any insertion within the overlay. If the overlay has a
|
||
'insert-in-front-hooks' property, it runs for insertion at the
|
||
beginning boundary of the overlay. If the overlay has an
|
||
'insert-behind-hooks' property, it runs for insertion at the end
|
||
boundary of the overlay.
|
||
|
||
The values of these properties should be lists of functions. Each
|
||
function is called, receiving as arguments the overlay in question,
|
||
followed by the bounds of the range being modified.
|
||
|
||
** The new `-name NAME' option directs Emacs to search for its X
|
||
resources using the name 'NAME', and sets the title of the initial
|
||
frame. This argument was added for consistency with other X clients.
|
||
|
||
** The new `-xrm DATABASE' option tells Emacs to treat the string
|
||
DATABASE as the text of an X resource database. Emacs searches
|
||
DATABASE for resource values, in addition to the usual places. This
|
||
argument was added for consistency with other X clients.
|
||
|
||
** Emacs now searches for X resources in the files specified by the
|
||
XFILESEARCHPATH, XUSERFILESEARCHPATH, and XAPPLRESDIR environment
|
||
variables, emulating the functionality provided by programs written
|
||
using Xt. Because of this change, Emacs will now notice system-wide
|
||
application defaults files, as other X clients do.
|
||
|
||
XFILESEARCHPATH and XUSERFILESEARCHPATH should be a list of file names
|
||
separated by colons; XAPPLRESDIR should be a list of directory names
|
||
separated by colons.
|
||
|
||
Emacs searches for X resources
|
||
+ specified on the command line, with the `-xrm RESOURCESTRING'
|
||
option,
|
||
+ then in the value of the XENVIRONMENT environment variable,
|
||
- or if that is unset, in the file named ~/.Xdefaults-HOSTNAME if it exists
|
||
(where HOSTNAME is the hostname of the machine Emacs is running on),
|
||
+ then in the screen-specific and server-wide resource properties
|
||
provided by the server,
|
||
- or if those properties are unset, in the file named ~/.Xdefaults
|
||
if it exists,
|
||
+ then in the files listed in XUSERFILESEARCHPATH,
|
||
- or in files named LANG/Emacs in directories listed in XAPPLRESDIR
|
||
(where LANG is the value of the LANG environment variable), if
|
||
the LANG environment variable is set,
|
||
- or in files named Emacs in the directories listed in XAPPLRESDIR
|
||
- or in ~/LANG/Emacs (if the LANG environment variable is set),
|
||
- or in ~/Emacs,
|
||
+ then in the files listed in XFILESEARCHPATH.
|
||
|
||
The paths in the variables XFILESEARCHPATH, XUSERFILESEARCHPATH, and
|
||
XAPPLRESDIR may contain %-escapes (like the control strings passed to
|
||
the Emacs lisp 'format' function or C printf function), which Emacs expands.
|
||
|
||
%N is replaced by the string "Emacs" wherever it occurs.
|
||
%T is replaced by "app-defaults" wherever it occurs.
|
||
%S is replaced by the empty string wherever it occurs.
|
||
%L and %l are replaced by the value of the LANG environment variable; if LANG
|
||
is not set, Emacs does not use that directory or file name at all.
|
||
%C is replaced by the value of the resource named "customization"
|
||
(class "Customization"), as retrieved from the server's resource
|
||
properties or the user's ~/.Xdefaults file, or the empty string if
|
||
that resource doesn't exist.
|
||
|
||
So, for example,
|
||
if XFILESEARCHPATH is set to the value
|
||
"/usr/lib/X11/%L/%T/%N%C:/usr/lib/X11/%T/%N%C:/usr/lib/X11/%T/%N",
|
||
and the LANG environment variable is set to
|
||
"english",
|
||
and the customization resource is the string
|
||
"-color",
|
||
then, in the last step of the process described above, Emacs checks
|
||
for resources in the first of the following files that is present and
|
||
readable:
|
||
/usr/lib/X11/english/app-defaults/Emacs-color
|
||
/usr/lib/X11/app-defaults/Emacs-color
|
||
/usr/lib/X11/app-defaults/Emacs
|
||
If the LANG environment variable is not set, then Emacs never uses the
|
||
first element of the path, "/usr/lib/X11/%L/%T/%N%C", because it
|
||
contains the %L escape.
|
||
|
||
If XFILESEARCHPATH is unset, Emacs uses the default value
|
||
"/usr/lib/X11/%L/app-defaults/Emacs%C:\
|
||
/usr/lib/X11/app-defaults/Emacs%C:\
|
||
/usr/lib/X11/%L/app-defaults/Emacs:\
|
||
/usr/lib/X11/app-defaults/Emacs"
|
||
|
||
This feature was added for consistency with other X applications.
|
||
|
||
** The new function 'text-property-any' scans the region of text from
|
||
START to END to see if any character's property PROP is 'eq' to
|
||
VALUE. If so, it returns the position of the first such character.
|
||
Otherwise, it returns nil.
|
||
|
||
The optional fifth argument, OBJECT, specifies the string or buffer to
|
||
be examined.
|
||
|
||
** The new function 'text-property-not-all' scans the region of text from
|
||
START to END to see if any character's property PROP is not 'eq' to
|
||
VALUE. If so, it returns the position of the first such character.
|
||
Otherwise, it returns nil.
|
||
|
||
The optional fifth argument, OBJECT, specifies the string or buffer to
|
||
be examined.
|
||
|
||
** The function 'delete-windows-on' now takes an optional second
|
||
argument FRAME, which specifies which frames it should affect.
|
||
+ If FRAME is nil or omitted, then 'delete-windows-on' deletes windows
|
||
showing BUFFER (its first argument) on all frames.
|
||
+ If FRAME is t, then 'delete-windows-on' only deletes windows on the
|
||
selected frame; other frames are unaffected.
|
||
+ If FRAME is a frame, then 'delete-windows-on' only deletes windows on
|
||
the given frame; other frames are unaffected.
|
||
|
||
|
||
|
||
* Changes in version 19.16.
|
||
|
||
** When dragging the mouse to select a region, Emacs now highlights the
|
||
region as you drag (if Transient Mark mode is enabled). If you
|
||
continue the drag beyond the boundaries of the window, Emacs scrolls
|
||
the window at a steady rate until you either move the mouse back into
|
||
the window or release the button.
|
||
|
||
** RET now exits 'query-replace' and 'query-replace-regexp'; this makes it
|
||
more consistent with the incremental search facility, which uses RET
|
||
to end the search.
|
||
|
||
** In C mode, C-c C-u now runs c-up-conditional.
|
||
C-c C-n and C-c C-p now run new commands that move forward
|
||
and back over balanced sets of C conditionals ('c-forward-conditional'
|
||
and 'c-backward-conditional').
|
||
|
||
** The Edit entry in the menu bar has a new alternative:
|
||
"Choose Next Paste". It gives you a menu showing the various
|
||
strings in the kill ring; click on one to select it as the text
|
||
to be yanked ("pasted") the next time you yank.
|
||
|
||
** If you enable Transient Mark mode and set 'mark-even-if-inactive' to
|
||
non-nil, then the region is highlighted in a transient fashion just as
|
||
normally in Transient Mark mode, but the mark really remains active
|
||
all the time; commands that use the region can be used even if the
|
||
region highlighting turns off.
|
||
|
||
** If you type C-h after a prefix key, it displays the bindings
|
||
that start with that prefix.
|
||
|
||
** The VC package now searches for version control commands in the
|
||
directories named by the variable 'vc-path'; its value should be a
|
||
list of strings.
|
||
|
||
** If you are visiting a file that has locks registered under RCS,
|
||
VC now displays each lock's owner and version number in the mode line
|
||
after the string 'RCS'. If there are no locks, VC displays the head
|
||
version number.
|
||
|
||
** When using X, if you load the 'paren' library, Emacs automatically
|
||
underlines or highlights the matching paren whenever point is
|
||
next to the outside of a paren. When point is before an open-paren,
|
||
this shows the matching close; when point is after a close-paren,
|
||
this shows the matching open.
|
||
|
||
** The new function 'define-key-after' is like 'define-key',
|
||
but takes an extra argument AFTER. It places the newly defined
|
||
binding after the binding for the event AFTER.
|
||
|
||
** 'accessible-keymaps' now takes an optional second argument, PREFIX.
|
||
If PREFIX is non-nil, it means the value should include only maps for
|
||
keys that start with PREFIX.
|
||
|
||
'describe-bindings' also accepts an optional argument PREFIX which
|
||
means to describe only the keys that start with PREFIX.
|
||
|
||
** The variable 'prefix-help-command' hold a command to run to display help
|
||
whenever the character 'help-char' follows a prefix key and does not have
|
||
a key binding in that context.
|
||
|
||
** Emacs now detects double- and triple-mouse clicks. A single mouse
|
||
click produces a pair events of the form:
|
||
(down-mouse-N POSITION)
|
||
(mouse-N POSITION)
|
||
Clicking the same mouse button again, soon thereafter and at the same
|
||
location, produces another pair of events of the form:
|
||
(down-mouse-N POSITION)
|
||
(double-mouse-N POSITION 2)
|
||
Another click will produce an event pair of the form:
|
||
(down-mouse-N POSITION)
|
||
(triple-mouse-N POSITION 3)
|
||
All the POSITIONs in such a sequence would be identical, except for
|
||
their timestamps.
|
||
|
||
To count as double- and triple-clicks, mouse clicks must be at the
|
||
same location as the first click, and the number of milliseconds
|
||
between the first release and the second must be less than the value
|
||
of the lisp variable 'double-click-time'. Setting 'double-click-time'
|
||
to nil disables multi-click detection. Setting it to t removes the
|
||
time limit; Emacs then detects multi-clicks by position only.
|
||
|
||
If 'read-key-sequence' finds no binding for a double-click event, but
|
||
the corresponding single-click event would be bound,
|
||
'read-key-sequence' demotes it to a single-click. Similarly, it
|
||
demotes unbound triple-clicks to double- or single-clicks. This means
|
||
you don't have to distinguish between single- and multi-clicks if you
|
||
don't want to.
|
||
|
||
Emacs reports all clicks after the third as 'triple-mouse-N' clicks,
|
||
but increments the click count after POSITION. For example, a fourth
|
||
click, soon after the third and at the same location, produces a pair
|
||
of events of the form:
|
||
(down-mouse-N POSITION)
|
||
(triple-mouse-N POSITION 4)
|
||
|
||
** The way Emacs reports positions of mouse events has changed
|
||
slightly. If a mouse event includes a position list of the form:
|
||
(WINDOW (PLACE-SYMBOL) (COLUMN . ROW) TIMESTAMP)
|
||
this denotes exactly the same position as the list:
|
||
(WINDOW PLACE-SYMBOL (COLUMN . ROW) TIMESTAMP)
|
||
That is, the event occurred over a non-textual area of the frame,
|
||
specified by PLACE-SYMBOL, a symbol like 'mode-line' or
|
||
'vertical-scroll-bar'.
|
||
|
||
Enclosing PLACE-SYMBOL in a singleton list does not change the
|
||
position denoted, but the 'read-key-sequence' function uses the
|
||
presence or absence of the singleton list to tell whether or not it
|
||
should prefix the event with its place symbol.
|
||
|
||
Normally, 'read-key-sequence' prefixes mouse events occurring over
|
||
non-textual areas with their PLACE-SYMBOLs, to select the sub-keymap
|
||
appropriate for the event; for example, clicking on the mode line
|
||
produces a sequence like
|
||
[mode-line (mouse-1 POSN)]
|
||
However, if lisp code elects to unread the resulting key sequence by
|
||
placing it in the 'unread-command-events' variable, it is important
|
||
that 'read-key-sequence' not insert the prefix symbol again; that
|
||
would produce a malformed key sequence like
|
||
[mode-line mode-line (mouse-1 POSN)]
|
||
For this reason, 'read-key-sequence' encloses the event's PLACE-SYMBOL
|
||
in a singleton list when it first inserts the prefix, but doesn't
|
||
insert the prefix when processing events whose PLACE-SYMBOLs are
|
||
already thus enclosed.
|
||
|
||
|
||
|
||
* Changes in version 19.15.
|
||
|
||
** 'make-frame-visible', which uniconified frames, is now a command,
|
||
and thus may be bound to a key. This makes sense because frames
|
||
respond to user input while iconified.
|
||
|
||
** You can now use Meta mouse clicks to set and use the "secondary
|
||
selection". You can drag M-Mouse-1 across the region you want to
|
||
select. Or you can press M-Mouse-1 at one end and M-Mouse-3 at the
|
||
other (this also copies the text to the kill ring). Repeating M-Mouse-3
|
||
again at the same place kills that text.
|
||
|
||
M-Mouse-2 kills the secondary selection.
|
||
|
||
Setting the secondary selection does not move point or the mark. It
|
||
is possible to make a secondary selection that does not all fit on the
|
||
screen, by using M-Mouse-1 at one end, scrolling, then using M-Mouse-3
|
||
at the other end.
|
||
|
||
Emacs has only one secondary selection at any time. Starting to set
|
||
a new one cancels any previous one. The secondary selection displays
|
||
using a face named 'secondary-selection'.
|
||
|
||
** New hook 'mail-citation-hook'. E.g. to request use of Supercite (sc.el):
|
||
|
||
(add-hook 'mail-citation-hook #'sc-cite-original)
|
||
|
||
Currently this works with Rmail. In the future, other Emacs based
|
||
mail-readers should be modified to understand this hook also.
|
||
In the mean time, you should keep doing what you have done in the past
|
||
for those other mail readers.
|
||
|
||
** When a regular expression contains `\(...\)' inside a repetition
|
||
operator such as `*' or `+', and you ask about the range that was matched
|
||
using 'match-beginning' and 'match-end', the range you get corresponds
|
||
to the *last* repetition *only*. In Emacs 18, you would get a range
|
||
corresponding to all the repetitions.
|
||
|
||
If you want to get a range corresponding to all the repetitions,
|
||
put a `\(...\)' grouping *outside* the repetition operator. This
|
||
is the syntax that corresponds logically to the desired result, and
|
||
it works the same in Emacs 18 and Emacs 19.
|
||
|
||
(This change actually took place earlier, but we didn't know about it
|
||
and thus didn't document it.)
|
||
|
||
|
||
|
||
* Changes in version 19.14.
|
||
|
||
** To modify read-only text, bind the variable 'inhibit-read-only'
|
||
to a non-nil value. If the value is t, then all reasons that might
|
||
make text read-only are inhibited (including 'read-only' text properties).
|
||
If the value is a list, then a 'read-only' property is inhibited
|
||
if it is 'memq' in the list.
|
||
|
||
** If you call 'get-buffer-window' passing t as its second argument, it
|
||
will only search for windows on visible frames. Previously, passing t
|
||
as the second argument caused 'get-buffer-window' to search all
|
||
frames, visible or not.
|
||
|
||
** If you call 'other-buffer' with a nil or omitted second argument, it
|
||
will ignore buffers displayed windows on any visible frame, not just
|
||
the selected frame.
|
||
|
||
** You can specify a window or a frame for C-x # to use when
|
||
selects a server buffer. Set the variable server-window
|
||
to the window or frame that you want.
|
||
|
||
** The command M-( now inserts spaces outside the open-parentheses in
|
||
some cases--depending on the syntax classes of the surrounding
|
||
characters. If the variable 'parens-dont-require-spaces' is non-nil,
|
||
it inhibits insertion of these spaces.
|
||
|
||
** The GUD package now supports the debugger known as xdb on HP/UX
|
||
systems. Use M-x xdb. The variable 'gud-xdb-directories' lets you
|
||
specify a list of directories to search for source code.
|
||
|
||
** If you are using the mailabbrev package, you should note that its
|
||
function for defining an alias is now called 'define-mail-abbrev'.
|
||
This package no longer contains a definition for 'define-mail-alias';
|
||
that name is used only in mailaliases.
|
||
|
||
** Inserted characters now inherit the properties of the text before
|
||
them, by default, rather than those of the following text.
|
||
|
||
** The function 'insert-file-contents' now takes optional arguments BEG
|
||
and END that specify which part of the file to insert. BEG defaults to
|
||
0 (the beginning of the file), and END defaults to the end of the file.
|
||
|
||
If you specify BEG or END, then the argument VISIT must be nil.
|
||
|
||
|
||
|
||
* Changes in version 19.13.
|
||
|
||
** Magic file names can now handle the 'load' operation.
|
||
|
||
** Bibtex mode now sets up special entries in the menu bar.
|
||
|
||
** The incremental search commands C-w and C-y, which copy text from
|
||
the buffer into the search string, now convert it to lower case
|
||
if you are in a case-insensitive search. This is to avoid making
|
||
the search a case-sensitive one.
|
||
|
||
** GNUS now knows your time zone automatically if Emacs does.
|
||
|
||
** Hide-ifdef mode no longer defines keys of the form
|
||
C-c LETTER, since those keys are reserved for users.
|
||
Those commands have been moved to C-c M-LETTER.
|
||
We may move them again for greater consistency with other modes.
|
||
|
||
|
||
|
||
* Changes in version 19.12.
|
||
|
||
** You can now make many of the sort commands ignore case by setting
|
||
'sort-fold-case' to a non-nil value.
|
||
|
||
|
||
|
||
* Changes in version 19.11.
|
||
|
||
** Supercite is installed.
|
||
|
||
** 'write-file-hooks' functions that return non-nil are responsible
|
||
for making a backup file if you want that to be done.
|
||
To do so, execute the following code:
|
||
|
||
(or buffer-backed-up (backup-buffer))
|
||
|
||
You might wish to save the file modes value returned by
|
||
'backup-buffer' and use that to set the mode bits of the file
|
||
that you write. This is what 'basic-save-buffer' does when
|
||
it writes a file in the usual way.
|
||
|
||
(This is not actually new, but wasn't documented before.)
|
||
|
||
|
||
|
||
* Changes in version 19.10.
|
||
|
||
** The command 'repeat-complex-command' is now on C-x ESC ESC.
|
||
It used to be bound to C-x ESC.
|
||
|
||
The reason for this change is to make function keys work after C-x.
|
||
|
||
** The variable 'highlight-nonselected-windows' now controls whether
|
||
the region is highlighted in windows other than the selected window
|
||
(in Transient Mark mode only, of course, and currently only when
|
||
using X).
|
||
|
||
|
||
|
||
* Changes in version 19.8.
|
||
|
||
** It is now simpler to tell Emacs to display accented characters under
|
||
X windows. M-x standard-display-european toggles the display of
|
||
buffer text according to the ISO Latin-1 standard. With a prefix
|
||
argument, this command enables European character display if and only
|
||
if the argument is positive.
|
||
|
||
** The '-i' command-line argument tells Emacs to use a picture of the
|
||
GNU gnu as its icon, instead of letting the window manager choose an
|
||
icon for it. This option used to insert a file into the current
|
||
buffer; use '-insert' to do that now.
|
||
|
||
** The 'configure' script now supports '--prefix' and '--exec-prefix'
|
||
options.
|
||
|
||
The '--prefix=PREFIXDIR' option specifies where the installation process
|
||
should put emacs and its data files. This defaults to `/usr/local'.
|
||
- Emacs (and the other utilities users run) go in PREFIXDIR/bin
|
||
(unless the '--exec-prefix' option says otherwise).
|
||
- The architecture-independent files go in PREFIXDIR/lib/emacs/VERSION
|
||
(where VERSION is the version number of Emacs, like `19.7').
|
||
- The architecture-dependent files go in
|
||
PREFIXDIR/lib/emacs/VERSION/CONFIGURATION
|
||
(where CONFIGURATION is the configuration name, like mips-dec-ultrix4.2),
|
||
unless the '--exec-prefix' option says otherwise.
|
||
|
||
The '--exec-prefix=EXECDIR' option allows you to specify a separate
|
||
portion of the directory tree for installing architecture-specific
|
||
files, like executables and utility programs. If specified,
|
||
- Emacs (and the other utilities users run) go in EXECDIR/bin, and
|
||
- The architecture-dependent files go in
|
||
EXECDIR/lib/emacs/VERSION/CONFIGURATION.
|
||
EXECDIR/bin should be a directory that is normally in users' PATHs.
|
||
|
||
** When running under X, the new lisp function 'x-list-fonts'
|
||
allows code to find out which fonts are available from the X server.
|
||
The first argument PATTERN is a string, perhaps with wildcard characters;
|
||
the * character matches any substring, and
|
||
the ? character matches any single character.
|
||
PATTERN is case-insensitive.
|
||
If the optional arguments FACE and FRAME are specified, then
|
||
'x-list-fonts' returns only fonts the same size as FACE on FRAME.
|
||
|
||
|
||
|
||
* Changes in version 19.
|
||
|
||
** When you kill buffers, Emacs now returns memory to the operating system,
|
||
thus reducing the size of the Emacs process. All the space that you free
|
||
up by killing buffers can now be reused for other buffers no matter what
|
||
their sizes, or reused by other processes if Emacs doesn't need it.
|
||
|
||
** Emacs now does garbage collection and auto saving while it is waiting
|
||
for input, which often avoids the need to do these things while you
|
||
are typing.
|
||
|
||
The variable 'auto-save-timeout' says how many seconds Emacs should
|
||
wait, after you stop typing, before it does an auto save and a garbage
|
||
collection.
|
||
|
||
** If auto saving detects that a buffer has shrunk greatly, it refrains
|
||
from auto saving that buffer and displays a warning. Now it also turns
|
||
off Auto Save mode in that buffer, so that you won't get the same
|
||
warning again.
|
||
|
||
If you reenable Auto Save mode in that buffer, Emacs will start saving
|
||
it again with no further warnings.
|
||
|
||
** A new minor mode called 'line-number-mode' displays the current line
|
||
number in the mode line, updating it as necessary when you move
|
||
point.
|
||
|
||
However, if the buffer is very large (larger than the value of
|
||
'line-number-display-limit'), then the line number doesn't appear.
|
||
This is because computing the line number can be painfully slow if the
|
||
buffer is very large.
|
||
|
||
** You can quit while Emacs is waiting to read or write files.
|
||
|
||
** The arrow keys now have default bindings to move in the appropriate
|
||
directions.
|
||
|
||
** You can suppress next-line's habit of inserting a newline when
|
||
called at the end of a buffer by setting 'next-line-add-newlines' to nil
|
||
(it defaults to t).
|
||
|
||
** You can now get back recent minibuffer inputs conveniently. While
|
||
in the minibuffer, type M-p to fetch the next earlier minibuffer
|
||
input, and use M-n to fetch the next later input.
|
||
|
||
There are also commands to search forward or backward through the
|
||
history for history elements that match a regular expression. M-r
|
||
searches older elements in the history, while M-s searches newer
|
||
elements. By special dispensation, these commands can always use the
|
||
minibuffer to read their arguments even though you are already in the
|
||
minibuffer when you issue them.
|
||
|
||
The history feature is available for all uses of the minibuffer, but
|
||
there are separate history lists for different kinds of input. For
|
||
example, there is a list for file names, used by all the commands that
|
||
read file names. There is a list for arguments of commands like
|
||
'query-replace'. There are also very specific history lists, such
|
||
as the one that 'compile' uses for compilation commands.
|
||
|
||
** You can now display text in a mixture of fonts and colors, using the
|
||
"face" feature, together with the overlay and text property features.
|
||
See the Emacs Lisp manual for details. The Emacs Users Manual describes
|
||
how to change the colors and font of standard predefined faces.
|
||
|
||
** You can refer to files on other machines using special file name syntax:
|
||
|
||
/HOST:FILENAME
|
||
/USER@HOST:FILENAME
|
||
|
||
When you do this, Emacs uses the FTP program to read and write files on
|
||
the specified host. It logs in through FTP using your user name or the
|
||
name USER. It may ask you for a password from time to time; this
|
||
is used for logging in on HOST.
|
||
|
||
** Some C-x key bindings have been moved onto new prefix keys.
|
||
|
||
C-x r is a prefix for registers and rectangles.
|
||
C-x n is a prefix for narrowing.
|
||
C-x a is a prefix for abbrev commands.
|
||
|
||
C-x r C-SPC
|
||
C-x r SPC 'point-to-register' (Was C-x /)
|
||
C-x r j 'jump-to-register' (Was C-x j)
|
||
C-x r s 'copy-to-register' (Was C-x x)
|
||
C-x r i 'insert-register' (Was C-x g)
|
||
C-x r r 'copy-rectangle-to-register' (Was C-x r)
|
||
C-x r k 'kill-rectangle'
|
||
C-x r y 'yank-rectangle'
|
||
C-x r o 'open-rectangle'
|
||
C-x r f 'frame-configuration-to-register'
|
||
(This saves the state of all windows in all frames.)
|
||
C-x r w 'window-configuration-to-register'
|
||
(This saves the state of all windows in the selected frame.)
|
||
|
||
(Use C-x r j to restore a configuration saved with C-x r f or C-x r w.)
|
||
|
||
C-x n n 'narrow-to-region' (Was C-x n)
|
||
C-x n p 'narrow-to-page' (Was C-x p)
|
||
C-x n w 'widen' (Was C-x w)
|
||
|
||
C-x a l 'add-mode-abbrev' (Was C-x C-a)
|
||
C-x a g 'add-global-abbrev' (Was C-x +)
|
||
C-x a i l 'inverse-add-mode-abbrev' (Was C-x C-h)
|
||
C-x a i g 'inverse-add-global-abbrev' (Was C-x -)
|
||
C-x a e 'expand-abbrev' (Was C-x ')
|
||
|
||
(The old key bindings C-x /, C-x j, C-x x and C-x g
|
||
have not yet been removed.)
|
||
|
||
** You can put a file name in a register to be able to visit the file
|
||
quickly. Do this:
|
||
|
||
(set-register ?CHAR '(file . NAME))
|
||
|
||
where NAME is the file name as a string. Then C-x r j CHAR finds that
|
||
file.
|
||
|
||
This is useful for files that you need to visit frequently,
|
||
but that you don't want to keep in buffers all the time.
|
||
|
||
** The keys M-g (fill-region) and C-x a (append-to-buffer)
|
||
have been eliminated.
|
||
|
||
** The new command 'string-rectangle' inserts a specified string on
|
||
each line of the region-rectangle.
|
||
|
||
** C-x 4 r is now 'find-file-read-only-other-window'.
|
||
|
||
** C-x 4 C-o is now 'display-buffer', which displays a specified buffer
|
||
in another window without selecting it.
|
||
|
||
** Picture mode has been substantially improved. The picture editing commands
|
||
now arrange for automatic horizontal scrolling to keep point visible
|
||
when editing a wide buffer with truncate-lines on. Picture-mode
|
||
initialization now does a better job of rebinding standard commands;
|
||
it finds not just their normal keybindings, but any function keys
|
||
attached to them.
|
||
|
||
** If you enable Transient Mark mode, then the mark becomes "inactive"
|
||
after every command that modifies the buffer. While the mark is
|
||
active, the region is highlighted (under X, at least). Most commands
|
||
that use the mark give an error if the mark is inactive, but you can
|
||
use C-x C-x to make it active again. This feature is also sometimes
|
||
known as "Zmacs mode".
|
||
|
||
** Outline mode is now available as a minor mode. This minor mode can
|
||
combine with any major mode; it substitutes the C-c commands of
|
||
Outline mode for those of the major mode. Use M-x outline-minor-mode
|
||
to enable and disable the new mode.
|
||
|
||
M-x outline-mode is unchanged; it still switches to Outline mode as a
|
||
major mode.
|
||
|
||
** The default setting of 'version-control' comes from the environment
|
||
variable VERSION_CONTROL.
|
||
|
||
** The user option for controlling whether files can set local
|
||
variables is now called 'enable-local-variables'. A value of t means
|
||
local-variables lists are obeyed; nil means they are ignored; anything
|
||
else means query the user.
|
||
|
||
The user option for controlling use of the 'eval' local variable is
|
||
now called is 'enable-local-eval'; its values are interpreted like
|
||
those of 'enable-local-variables'.
|
||
|
||
** X Window System changes:
|
||
|
||
C-x 5 C-f and C-x 5 b switch to a specified file or buffer in a new
|
||
frame. Likewise, C-x 5 m starts outgoing mail in another frame, and
|
||
C-x 5 . finds a tag in another frame.
|
||
|
||
When you are using X, C-z now iconifies the selected frame.
|
||
|
||
Emacs can now exchange text with other X applications. Killing or
|
||
copying text in Emacs now makes that text available for pasting into
|
||
other X applications. The Emacs yanking commands now insert the
|
||
latest selection set by other applications, and add the text to the
|
||
kill ring. The Emacs commands for selecting and inserting text with
|
||
the mouse now use the kill ring in the same way the keyboard killing
|
||
and yanking commands do.
|
||
|
||
The option to specify the title for the initial frame is now `-name NAME'.
|
||
There is currently no way to specify an icon title; perhaps we will add
|
||
one in the future.
|
||
|
||
** Undoing a deletion now puts point back where it was before the
|
||
deletion.
|
||
|
||
** The variables that control how much undo information to save have
|
||
been renamed to 'undo-limit' and 'undo-strong-limit'. They used to be
|
||
called 'undo-threshold' and 'undo-high-threshold'.
|
||
|
||
** You can now use kill commands in read-only buffers. They don't
|
||
actually change the buffer, and Emacs will beep and warn you that the
|
||
buffer is read-only, but they do copy the text you tried to kill into
|
||
the kill ring, so you can yank it into other buffers.
|
||
|
||
** C-o inserts the fill-prefix on the newly created line. The command
|
||
M-^ deletes the prefix (if it occurs) after the newline that it
|
||
deletes.
|
||
|
||
** C-M-l now runs the command 'reposition-window'. It scrolls the
|
||
window heuristically in a way designed to get useful information onto
|
||
the screen.
|
||
|
||
** C-M-r is now reverse incremental regexp search.
|
||
|
||
** M-z now kills through the target character. In version 18, it
|
||
killed up to but not including the target character.
|
||
|
||
** M-! now runs the specified shell command asynchronously if it
|
||
ends in `&' (just as the shell does).
|
||
|
||
** C-h C-f and C-h C-k are new help commands that display the Info
|
||
node for a given Emacs function name or key sequence, respectively.
|
||
|
||
** The C-h p command system lets you find Emacs Lisp packages by
|
||
topic keywords. Here is a partial list of package categories:
|
||
|
||
abbrev abbreviation handling, typing shortcuts, macros
|
||
bib code related to the bib bibliography processor
|
||
c C and C++ language support
|
||
calendar calendar and time management support
|
||
comm communications, networking, remote access to files
|
||
docs support for Emacs documentation
|
||
emulations emulations of other editors
|
||
extensions Emacs Lisp language extensions
|
||
games games, jokes and amusements
|
||
hardware support for interfacing with exotic hardware
|
||
help support for on-line help systems
|
||
i14n internationalization and alternate character-set support
|
||
internal code for Emacs internals, build process, defaults
|
||
languages specialized modes for editing programming languages
|
||
lisp Lisp support, including Emacs Lisp
|
||
local code local to your site
|
||
maint maintenance aids for the Emacs development group
|
||
mail modes for electronic-mail handling
|
||
news support for netnews reading and posting
|
||
processes process, subshell, compilation, and job control support
|
||
terminals support for terminal types
|
||
tex code related to the TeX formatter
|
||
tools programming tools
|
||
unix front-ends/assistants for, or emulators of, UNIX features
|
||
vms support code for vms
|
||
wp word processing
|
||
|
||
More will be added soon.
|
||
|
||
** The command to split a window into two side-by-side windows is now
|
||
C-x 3. It was C-x 5.
|
||
|
||
** M-. (find-tag) no longer has any effect on what M-, will do
|
||
subsequently. You can no longer use M-, to find the next similar tag;
|
||
you must use M-. with a prefix argument, instead.
|
||
|
||
The motive for this change is so that you can more reliably use
|
||
M-, to resume a suspended 'tags-search' or 'tags-query-replace'.
|
||
|
||
** C-x s ('save-some-buffers') now gives you more options when it asks
|
||
whether to save a particular buffer. In addition to 'y' or 'n', you
|
||
can answer `!' to save all the remaining buffers, `.' to save this
|
||
buffer but not save any others, ESC to stop saving and exit the
|
||
command, and C-h to get help. These options are analogous to those
|
||
of 'query-replace'.
|
||
|
||
** M-x make-symbolic-link does not expand its first argument.
|
||
This lets you make a link with a target that is a relative file name.
|
||
|
||
** M-x add-change-log-entry and C-x 4 a now automatically insert the
|
||
name of the file and often the name of the function that you changed.
|
||
They also handle grouping of entries.
|
||
|
||
There is now a special major mode for editing ChangeLog files. It
|
||
makes filling work conveniently. Each bunch of grouped entries is one
|
||
paragraph, and each collection of entries from one person on one day
|
||
is considered a page.
|
||
|
||
** The 'comment-region' command adds comment delimiters to the lines that
|
||
start in the region, thus commenting them out. With a negative argument,
|
||
it deletes comment delimiters from the lines in the region--this cancels
|
||
the effect of 'comment-region' without an argument.
|
||
|
||
With a positive argument, 'comment-region' adds comment delimiters
|
||
but duplicates the last character of the comment start sequence as many
|
||
times as the argument specifies. This is a way of calling attention to
|
||
the comment. In Lisp, you should use an argument at least two, because
|
||
the indentation convention for single semicolon comments does not leave
|
||
them at the beginning of a line.
|
||
|
||
** If 'split-window-keep-point' is non-nil, C-x 2 tries to avoid
|
||
shifting any text on the screen by putting point in whichever window
|
||
happens to contain the screen line the cursor is already on.
|
||
The default is that 'split-window-keep-point' is non-nil on slow
|
||
terminals.
|
||
|
||
** M-x super-apropos is like M-x apropos except that it searches both
|
||
Lisp symbol names and documentation strings for matches. It describes
|
||
every symbol that has a match in either the symbol's name or its
|
||
documentation.
|
||
|
||
Both M-x apropos and M-x super-apropos take an optional second
|
||
argument DO-ALL which controls the more expensive part of the job.
|
||
This includes looking up and printing the key bindings of all
|
||
commands. It also includes checking documentation strings in
|
||
super-apropos. DO-ALL is nil by default; use a prefix arg to make it
|
||
non-nil.
|
||
|
||
** M-x revert-buffer no longer offers to revert from a recent auto-save
|
||
file unless you give it a prefix argument. Otherwise it always
|
||
reverts from the real file regardless of whether there has been an
|
||
auto-save since then. (Reverting from the auto-save file is no longer
|
||
very useful now that the undo capacity is larger.)
|
||
|
||
** M-x recover-file no longer turns off Auto Save mode when it reads
|
||
the last Auto Save file.
|
||
|
||
** M-x rename-buffer, if you give it a prefix argument,
|
||
avoids errors by modifying the new name to make it unique.
|
||
|
||
** M-x rename-uniquely renames the current buffer to a similar name
|
||
with a numeric suffix added to make it both different and unique.
|
||
|
||
One use of this command is for creating multiple shell buffers.
|
||
If you rename your shell buffer, and then do M-x shell again, it
|
||
makes a new shell buffer. This method is also good for mail buffers,
|
||
compilation buffers, and any Emacs feature which creates a special
|
||
buffer with a particular name.
|
||
|
||
** M-x compare-windows with a prefix argument ignores changes in whitespace.
|
||
If 'compare-ignore-case' is non-nil, then differences in case are also
|
||
ignored.
|
||
|
||
** 'backward-paragraph' is now bound to M-{ by default, and 'forward-paragraph'
|
||
to M-}. Originally, these commands were bound to M-[ and M-], but they were
|
||
running into conflicts with the use of function keys. On many terminals,
|
||
function keys send a sequence beginning ESC-[, so many users have defined this
|
||
as a prefix key.
|
||
|
||
** C-x C-u (upcase-region) and C-x C-l (downcase-region) are now disabled by
|
||
default; these commands seem to be often hit by accident, and can be
|
||
quite destructive if their effects are not noticed immediately.
|
||
|
||
** The function 'erase-buffer' is now interactive, but disabled by default.
|
||
|
||
** When visiting a new file, Emacs attempts to abbreviate the file's
|
||
path using the symlinks listed in 'directory-abbrev-alist'.
|
||
|
||
** When you visit the same file in under two names that translate into
|
||
the same name once symbolic links are handled, Emacs warns you that
|
||
you have two buffers for the same file.
|
||
|
||
** If you wish to avoid visiting the same file in two buffers under
|
||
different names, set the variable 'find-file-existing-other-name'
|
||
non-nil. Then 'find-file' uses the existing buffer visiting the file,
|
||
no matter which of the file's names you specify.
|
||
|
||
** If you set 'find-file-visit-truename' non-nil, then the file name
|
||
recorded for a buffer is the file's truename (in which all symbolic
|
||
links have been removed), rather than the name you specify. Setting
|
||
'find-file-visit-truename' also implies the effect of
|
||
'find-file-existing-other-name'.
|
||
|
||
** C-x C-v now inserts the entire current file name in the minibuffer.
|
||
This is convenient if you made a small mistake in typing it. Point
|
||
goes after the last slash, before the last file name component, so if
|
||
you want to replace it entirely, you can use C-k right away to delete
|
||
it.
|
||
|
||
** Commands such as C-M-f in Lisp mode now ignore parentheses within comments.
|
||
|
||
** C-x q now uses ESC to terminate all iterations of the keyboard
|
||
macro, rather than C-d as before.
|
||
|
||
** Use the command 'setenv' to set an individual environment variable
|
||
for Emacs subprocesses. Specify a variable name and a value, both as
|
||
strings. This command applies only to subprocesses yet to be
|
||
started.
|
||
|
||
** Use 'rot13-other-window' to examine a buffer with rot13.
|
||
|
||
This command does not change the text in the buffer. Instead, it
|
||
creates a window with a funny display table that applies the code when
|
||
displaying the text.
|
||
|
||
** The command `M-x version' now prints the current Emacs version; The
|
||
'version' command is an alias for the 'emacs-version' command.
|
||
|
||
** More complex changes in existing packages.
|
||
|
||
*** 'fill-nonuniform-paragraphs' is a new command, much like
|
||
'fill-individual-paragraphs' except that only separator lines separate
|
||
paragraphs. Since this means that the lines of one paragraph may have
|
||
different amounts of indentation, the fill prefix used is the smallest
|
||
amount of indentation of any of the lines of the paragraph.
|
||
|
||
*** Filling is now partially controlled by a new minor mode,
|
||
'adaptive-fill-mode'. When this mode is enabled (and it is enabled
|
||
by default), if you use M-x fill-region-as-paragraph on an indented
|
||
paragraph and you don't have a fill prefix, it uses the indentation
|
||
of the second line of the paragraph as the fill prefix.
|
||
|
||
Adaptive Fill mode doesn't have much effect on M-q in most major
|
||
modes, because an indented line will probably count as a paragraph
|
||
starter and thus each line of an indented paragraph will be considered
|
||
a paragraph of its own.
|
||
|
||
*** M-q in C mode now runs 'c-fill-paragraph', which is designed
|
||
for filling C comments. (We assume you don't want to fill
|
||
the code in a C program.)
|
||
|
||
*** M-$ now runs the Ispell program instead of the Unix spell program.
|
||
|
||
M-$ starts an Ispell process the first time you use it. But the process
|
||
stays alive, so that subsequent uses of M-$ run very fast.
|
||
If you want to get rid of the process, use M-x kill-ispell.
|
||
|
||
To check the entire current buffer, use M-x ispell-buffer.
|
||
Use M-x ispell-region to check just the current region.
|
||
|
||
Ispell commands often involve interactive replacement of words.
|
||
You can interrupt the interactive replacement with C-g.
|
||
You can restart it again afterward with C-u M-$.
|
||
|
||
During interactive replacement, you can type the following characters:
|
||
|
||
a Accept this word this time.
|
||
DIGIT Replace the word (this time) with one of the displayed near-misses.
|
||
The digit you use says which near-miss to use.
|
||
i Insert this word in your private dictionary
|
||
so that Ispell will consider it correct it from now on.
|
||
r Replace the word this time with a string typed by you.
|
||
|
||
When the Ispell process starts, it reads your private dictionary which
|
||
is the file `~/ispell.words'. If you "insert" words with the 'i' command,
|
||
these words are added to that file, but not right away--only at the end
|
||
of the interactive replacement process.
|
||
|
||
Use M-x reload-ispell to reload your private dictionary from
|
||
`~/ispell.words' if you edit it outside of Ispell.
|
||
|
||
** Changes in existing modes.
|
||
|
||
*** gdb-mode has been replaced by gud-mode.
|
||
|
||
The package gud.el (Grand Unified Debugger) replaces gdb.el in Emacs
|
||
19. It provides a gdb.el-like interface to any of three debuggers;
|
||
gdb itself, the sdb debugger supported on some Unix systems, or the
|
||
dbx debugger on Berkeley systems.
|
||
|
||
You start it up with one of the commands M-x gdb, M-x sdb, or
|
||
M-x dbx. Each entry point finishes by executing a hook; gdb-mode-hook,
|
||
sdb-mode-hook or dbx-mode-hook respectively.
|
||
|
||
These bindings have changed:
|
||
C-x C-a > gud-down (was M-d)
|
||
C-x C-a < gud-up (was M-u)
|
||
C-x C-a C-r gud-cont (was M-c)
|
||
C-x C-a C-n gud-next (was M-n)
|
||
C-x C-a C-s gud-step (was M-s)
|
||
C-x C-a C-i gud-stepi (was M-i)
|
||
C-x C-a C-l gud-recenter (was C-l)
|
||
C-d comint-delchar-or-maybe-eof (was C-c C-d)
|
||
|
||
These bindings have been removed:
|
||
C-c C-r (was comint-show-output; now gud-cont)
|
||
|
||
Since GUD mode uses comint, it uses comint's input history commands,
|
||
superseding C-c C-y (copy-last-shell-input):
|
||
M-p comint-next-input
|
||
M-n comint-previous-input
|
||
M-r comint-previous-similar-input
|
||
M-s comint-next-similar-input
|
||
M-C-r comint-previous-input-matching
|
||
|
||
The C-x C-a bindings are also active in source files.
|
||
|
||
*** The old TeX mode bindings of M-{ and M-} have been moved to C-c {
|
||
and C-c }. (These commands are 'up-list' and 'tex-insert-braces';
|
||
they are the TeX equivalents of M-( and M-).) This is because M-{
|
||
and M-} are now globally defined commands.
|
||
|
||
*** Changes in Mail mode.
|
||
|
||
`%' is now a word-separator character in Mail mode.
|
||
|
||
'mail-signature', if non-nil, tells M-x mail to insert your
|
||
`.signature' file automatically. If you don't want your signature in
|
||
a particular message, just delete it before you send the message.
|
||
|
||
You can specify the text to insert at the beginning of each line when
|
||
you use C-c C-y to yank the message you are replying to. Set
|
||
'mail-yank-prefix' to the desired string. A value of 'nil' (the
|
||
default) means to use indentation, as in Emacs 18. If you use just
|
||
C-u as the prefix argument to C-c C-y, then it does not insert
|
||
anything at the beginning of the lines, regardless of the value of
|
||
'mail-yank-prefix'.
|
||
|
||
If you like, you can expand mail aliases as abbrevs, as soon as you
|
||
type them in. To enable this feature, execute the following:
|
||
|
||
(add-hook 'mail-setup-hook #'mail-abbrevs-setup)
|
||
|
||
This can go in your .emacs file.
|
||
|
||
Word abbrevs don't expand unless you insert a word-separator character
|
||
afterward. Any mail aliases that you didn't expand at insertion time
|
||
are expanded subsequently when you send the message.
|
||
|
||
*** Changes in Rmail.
|
||
|
||
Rmail by default gets new mail only from the system inbox file,
|
||
not from `~/mbox'.
|
||
|
||
In Rmail, you can retry sending a message that failed
|
||
by typing 'M-m' on the failure message.
|
||
|
||
By contrast, another new command M-x rmail-resend is used for
|
||
forwarding a message and marking it as "resent from" you
|
||
with header fields "Resent-From:" and "Resent-To:".
|
||
|
||
'e' is now the command to edit a message.
|
||
To expunge, type 'x'. We know this will surprise people
|
||
some of the time, but the surprise will not be disastrous--if
|
||
you type 'e' meaning to expunge, just turn off editing with C-c C-c
|
||
and then type 'x'.
|
||
|
||
Another new Rmail command is `<', which moves to the first message.
|
||
This is for symmetry with `>'.
|
||
|
||
Use the 'b' command to bury the Rmail buffer and its summary buffer,
|
||
if any, removing both of them from display on the screen.
|
||
|
||
The variable 'rmail-output-file-alist' now controls the default
|
||
for the file to output a message to.
|
||
|
||
In the Rmail summary buffer, all cursor motion commands select
|
||
the message you move to. It's really neat when you use
|
||
incremental search.
|
||
|
||
You can now issue most Rmail commands from an Rmail summary buffer.
|
||
The commands do the same thing in that buffer that they do in the
|
||
Rmail buffer. They apply to the message that is selected in the Rmail
|
||
buffer, which is always the one described by the current summary
|
||
line.
|
||
|
||
Conversely, motion and deletion commands in the Rmail buffer also
|
||
update the summary buffer. If you set the variable
|
||
'rmail-redisplay-summary' to a non-nil value, then they bring the
|
||
summary buffer (if one exists) back onto the screen.
|
||
|
||
C-M-t is a new command to make a summary by topic. It uses regexp
|
||
matching against just the subjects of the messages to decide which
|
||
messages to show in the summary.
|
||
|
||
You can easily convert an Rmail file to system mailbox format with the
|
||
command 'unrmail'. This command reads two arguments, the name of
|
||
the Rmail file to convert, and the name of the new mailbox file.
|
||
(This command does not change the Rmail file itself.)
|
||
|
||
Rmail now handles Content Length fields in messages.
|
||
|
||
*** 'mail-extract-address-components' unpacks mail addresses.
|
||
It takes an address as a string (the contents of the From field, for
|
||
example) and returns a list of the form (FULL-NAME
|
||
CANONICAL-ADDRESS).
|
||
|
||
*** Changes in C mode and C-related commands.
|
||
|
||
**** M-x c-up-conditional
|
||
|
||
In C mode, 'c-up-conditional' moves back to the containing
|
||
preprocessor conditional, setting the mark where point was
|
||
previously.
|
||
|
||
A prefix argument acts as a repeat count. With a negative argument,
|
||
this command moves forward to the end of the containing preprocessor
|
||
conditional. When going backwards, `#elif' acts like `#else' followed
|
||
by `#if'. When going forwards, `#elif' is ignored.
|
||
|
||
**** In C mode, M-a and M-e are now defined as
|
||
'c-beginning-of-statement' and 'c-end-of-statement'.
|
||
|
||
**** In C mode, M-x c-backslash-region is a new command to insert or
|
||
align `\' characters at the ends of the lines of the region, except
|
||
for the last such line. This is useful after writing or editing a C
|
||
macro definition.
|
||
|
||
If a line already ends in `\', this command adjusts the amount of
|
||
whitespace before it. Otherwise, it inserts a new `\'.
|
||
|
||
*** New features in info.
|
||
|
||
When Info looks for an Info file, it searches the directories
|
||
in 'Info-directory-list'. This makes it easy to install the Info files
|
||
that come with various packages. You can specify the path with
|
||
the environment variable INFOPATH.
|
||
|
||
There are new commands in Info mode.
|
||
|
||
`]' now moves forward a node, going up and down levels as needed.
|
||
`[' is similar but moves backward. These two commands try to traverse
|
||
the entire Info tree, node by node. They are the equivalent of reading
|
||
a printed manual sequentially.
|
||
|
||
`<' moves to the top node of the current Info file.
|
||
`>' moves to the last node of the file.
|
||
|
||
SPC scrolls through the current node; at the end, it advances to the
|
||
next node in depth-first order (like `]').
|
||
|
||
DEL scrolls backwards in the current node; at the end, it moves to the
|
||
previous node in depth-first order (like `[').
|
||
|
||
After a menu select, the info 'up' command now restores point in the
|
||
menu. The combination of this and the previous two changes means that
|
||
repeated SPC keystrokes do the right (depth-first traverse forward) thing.
|
||
|
||
`i STRING RET' moves to the node associated with STRING in the index
|
||
or indices of this manual. If there is more than one match for
|
||
STRING, the 'i' command finds the first match.
|
||
|
||
`,' finds the next match for the string in the previous 'i' command
|
||
|
||
If you click the middle mouse button near a cross-reference,
|
||
menu item or node pointer while in Info, you will go to the node
|
||
which is referenced.
|
||
|
||
*** Changes in M-x compile.
|
||
|
||
You can repeat any previous compilation command conveniently using the
|
||
minibuffer history commands, while in the minibuffer entering the
|
||
compilation command.
|
||
|
||
While a compilation is going on, the string 'Compiling' appears in
|
||
the mode line. When this string disappears, that tells you the
|
||
compilation is finished.
|
||
|
||
The buffer of compiler messages is in Compilation mode. This mode
|
||
provides the keys SPC and DEL to scroll by screenfuls, and M-n and M-p
|
||
to move to the next or previous error message. You can also use C-c
|
||
C-c on any error message to find the corresponding source code.
|
||
|
||
Emacs 19 has a more general parser for compiler messages. For example, it
|
||
can understand messages from lint, and from certain C compilers whose error
|
||
message format is unusual. Also, it only parses until it sees the error
|
||
message you want; you never have to wait a long time to see the first
|
||
error, no matter how big the buffer is.
|
||
|
||
*** M-x diff and M-x diff-backup.
|
||
|
||
This new command compares two files, displaying the differences in an
|
||
Emacs buffer. The options for the 'diff' program come from the
|
||
variable 'diff-switches', whose value should be a string.
|
||
|
||
The buffer of differences has Compilation mode as its major mode, so you
|
||
can use C-x ` to visit successive changed locations in the two
|
||
source files, or you can move to a particular hunk of changes and type
|
||
C-c C-c to move to the corresponding source. You can also use the
|
||
other special commands of Compilation mode: SPC and DEL for
|
||
scrolling, and M-n and M-p for cursor motion.
|
||
|
||
M-x diff-backup compares a file with its most recent backup.
|
||
If you specify the name of a backup file, 'diff-backup' compares it
|
||
with the source file that it is a backup of.
|
||
|
||
*** The View commands (such as M-x view-buffer and M-x view-file) no
|
||
longer use recursive edits; instead, they switch temporarily to a
|
||
different major mode (View mode) specifically designed for moving
|
||
around through a buffer without editing it.
|
||
|
||
*** Changes in incremental search.
|
||
|
||
**** The character to terminate an incremental search is now RET.
|
||
This is for compatibility with the way most other arguments are read.
|
||
|
||
To search for a newline in an incremental search, type LFD (also known
|
||
as C-j).
|
||
|
||
**** Incremental search now maintains a ring of previous search
|
||
strings. Use M-p and M-n to move through the ring to pick a search
|
||
string to reuse. These commands leave the selected search ring
|
||
element in the minibuffer, where you can edit it. Type C-s or C-r to
|
||
finish editing and search for the chosen string.
|
||
|
||
**** If you type an upper case letter in incremental search, that turns
|
||
off case-folding, so that you get a case-sensitive search.
|
||
|
||
**** If you type a space during regexp incremental search, it matches
|
||
any sequence of whitespace characters. If you want to match just a space,
|
||
type C-q SPC.
|
||
|
||
**** Incremental search is now implemented as a major mode. When you
|
||
type C-s, it switches temporarily to a different keymap which defines
|
||
each key to do what it ought to do for incremental search. This has
|
||
next to no effect on the user-visible behavior of searching, but makes
|
||
it easier to customize that behavior.
|
||
|
||
Emacs 19 eliminates the old variables `search-...-char' that used to
|
||
be the way to specify the characters to use for various special
|
||
purposes in incremental search. Instead, you can define the meaning
|
||
of a character in incremental search by modifying 'isearch-mode-map'.
|
||
|
||
*** New commands in Buffer Menu mode.
|
||
|
||
The command C-o now displays the current line's buffer in another
|
||
window but does not select it. This is like the existing command 'o'
|
||
which selects the current line's buffer in another window.
|
||
|
||
The command % toggles the read-only flag of the current line's buffer.
|
||
|
||
The way to switch to a set of several buffers, including those marked
|
||
with m, is now v. The q command simply quits, replacing the buffer
|
||
menu buffer with the buffer that was displayed previously.
|
||
|
||
** New major modes and packages.
|
||
|
||
*** The news reader GNUS is now installed.
|
||
|
||
*** There is a new interface for version control systems, called VC.
|
||
It works with both RCS and SCCS; in fact, you don't really have to
|
||
know which one of them is being used, because it automatically deals
|
||
with either one.
|
||
|
||
Most of the time, the only command you have to know about is C-x C-q.
|
||
This command normally toggles the read-only flag of the current
|
||
buffer. If the buffer is visiting a file that is maintained with a
|
||
version control system, the command still toggles read-only, but does
|
||
so by checking the file in or checking it out.
|
||
|
||
When you check a file in, VC asks you for a log entry by popping up a
|
||
buffer. Edit the entry there, then type C-c C-c when it is ready.
|
||
That's when the actual checkin happens. If you change your mind about
|
||
the checkin, simply switch buffers and don't ever go back to the log
|
||
buffer.
|
||
|
||
To start using version control for a file, use the command C-x v v.
|
||
This works like C-x C-q (performing the next logical version-control
|
||
operation needed to change the file's writability) but it will also
|
||
perform initial checkin on an unregistered file.
|
||
|
||
By default, VC uses RCS if RCS is installed on your machine;
|
||
otherwise, SCCS. If you want to make the choice explicitly, you can do
|
||
it by setting 'vc-default-back-end' to the symbol 'RCS' or the symbol
|
||
'SCCS'.
|
||
|
||
You can tell when a file you visit is maintained with version control
|
||
because either 'RCS' or 'SCCS' appears in the mode line.
|
||
|
||
*** A new Calendar mode has been added, the work of Edward M. Reingold.
|
||
The mode can display the Gregorian calendar and a variety of other
|
||
calendars at any date, and interacts with a diary facility similar to
|
||
the UNIX 'calendar' utility.
|
||
|
||
*** There is a new major mode for editing binary files: 'hexl-mode'.
|
||
To use it, use M-x hexl-find-file instead of C-x C-f to visit the file.
|
||
This command converts the file's contents to hexadecimal and lets you
|
||
edit the translation. When you save the file, it is converted
|
||
automatically back to binary.
|
||
|
||
You can also use M-x hexl-mode to translate an existing buffer into hex.
|
||
Do this if you have already visited a binary file.
|
||
|
||
Hexl mode has a few other commands:
|
||
|
||
C-M-d insert a byte with a code typed in decimal.
|
||
C-M-o insert a byte with a code typed in octal.
|
||
C-M-x insert a byte with a code typed in hex.
|
||
|
||
C-x [ move to the beginning of a 1k-byte "page".
|
||
C-x ] move to the end of a 1k-byte "page".
|
||
|
||
M-g go to an address specified in hex.
|
||
M-j go to an address specified in decimal.
|
||
|
||
C-c C-c leave hexl mode and go back to the previous major mode.
|
||
|
||
*** Miscellaneous new major modes include Awk mode, Icon mode, Makefile
|
||
mode, Perl mode and SGML mode.
|
||
|
||
*** Edebug, a new source-level debugger for Emacs Lisp functions.
|
||
|
||
To use Edebug, use the command M-x edebug-defun to "evaluate" a
|
||
function definition in an Emacs Lisp file. We put "evaluate" in
|
||
quotation marks because it doesn't just evaluate the function, it also
|
||
inserts additional information to support source-level debugging.
|
||
|
||
You must also do
|
||
|
||
(setq debugger 'edebug-debug)
|
||
|
||
to cause errors and single-stepping to use Edebug instead of the usual
|
||
Emacs Lisp debugger.
|
||
|
||
For more information, see the Edebug manual, which should be included
|
||
in the Emacs distribution.
|
||
|
||
*** C++ mode is like C mode, except that it understands C++ comment syntax
|
||
and certain other differences between C and C++. It also has a command
|
||
`fill-c++-comment' which fills a paragraph made of comment lines.
|
||
|
||
The command 'comment-region' is useful in C++ mode for commenting out
|
||
several consecutive lines, or removing the commenting out of such lines.
|
||
|
||
*** A new package for merging two variants of the same text.
|
||
|
||
It's not unusual for programmers to get their signals crossed and
|
||
modify the same program in two different directions. Then somebody
|
||
has to merge the two versions. The command 'emerge-files' makes this
|
||
easier.
|
||
|
||
'emerge-files' reads two file names and compares them. Then it
|
||
displays three buffers: one for each file, and one for the
|
||
differences.
|
||
|
||
If the original version of the file is available, you can make things
|
||
even easier using 'emerge-files-with-ancestor'. It reads three file
|
||
names--variant 1, variant 2, and the common ancestor--and uses diff3
|
||
to compare them.
|
||
|
||
You control the merging interactively. The main loop of Emerge
|
||
consists of showing you one set of differences, asking you what to do
|
||
about them, and doing it. You have a choice of two modes for giving
|
||
directions to Emerge: "fast" mode and "edit" mode.
|
||
|
||
In Fast mode, Emerge commands are single characters, and ordinary
|
||
Emacs commands are disabled. This makes Emerge operations fast, but
|
||
prevents you from doing more than selecting the A or the B version of
|
||
differences. In Edit mode, all emerge commands use the C-c prefix,
|
||
and the usual Emacs commands are available. This allows editing the
|
||
merge buffer, but slows down Emerge operations. Edit and fast modes
|
||
are indicated by 'F' and 'E' in the minor modes in the mode line.
|
||
|
||
The Emerge commands are:
|
||
|
||
p go to the previous difference
|
||
n go to the next difference
|
||
a select the A version of this difference
|
||
b select the B version of this difference
|
||
j go to a particular difference (prefix argument
|
||
specifies which difference) (0j suppresses display of
|
||
the flags)
|
||
q quit - finish the merge*
|
||
f go into fast mode
|
||
e go into edit mode
|
||
l recenter (C-l) all three windows*
|
||
- and 0 through 9
|
||
prefix numeric arguments
|
||
d a select the A version as the default from here down in
|
||
the merge buffer*
|
||
d b select the B version as the default from here down in
|
||
the merge buffer*
|
||
c a copy the A version of the difference into the kill
|
||
ring
|
||
c b copy the B version of the difference into the kill
|
||
ring
|
||
i a insert the A version of the difference at the point
|
||
i b insert the B version of the difference at the point
|
||
m put the point and mark around the difference region
|
||
^ scroll-down (like M-v) the three windows*
|
||
v scroll-up (like C-v) the three windows*
|
||
< scroll-left (like C-x <) the three windows*
|
||
> scroll-right (like C-x >) the three windows*
|
||
| reset horizontal scroll on the three windows*
|
||
x 1 shrink the merge window to one line (use C-u l to restore it
|
||
to full size)
|
||
x a find the difference containing a location in the A buffer*
|
||
x b find the difference containing a location in the B buffer*
|
||
x c combine the two versions of this difference*
|
||
x C combine the two versions of this difference, using a
|
||
register's value as the template*
|
||
x d find the difference containing a location in the merge buffer*
|
||
x f show the files/buffers Emerge is operating on in Help window
|
||
(use C-u l to restore windows)
|
||
x j join this difference with the following one
|
||
(C-u x j joins this difference with the previous one)
|
||
x l show line numbers of points in A, B, and merge buffers
|
||
x m change major mode of merge buffer*
|
||
x s split this difference into two differences
|
||
(first position the point in all three buffers to the places
|
||
to split the difference)
|
||
x t trim identical lines off top and bottom of difference
|
||
(such lines occur when the A and B versions are
|
||
identical but differ from the ancestor version)
|
||
x x set the template for the x c command*
|
||
|
||
Normally, the merged output goes back in the first file specified.
|
||
If you use a prefix argument, Emerge reads another file name to use
|
||
for the output file.
|
||
|
||
Once Emerge has prepared the buffer of differences, it runs the hooks
|
||
in 'emerge-startup-hooks'.
|
||
|
||
*** Asm mode is a new major mode for editing files of assembler code.
|
||
It defines these commands:
|
||
|
||
TAB tab-to-tab-stop.
|
||
LFD Insert a newline and then indent using tab-to-tab-stop.
|
||
: Insert a colon and then remove the indentation
|
||
from before the label preceding colon. Then tab-to-tab-stop.
|
||
; Insert or align a comment.
|
||
|
||
*** Two-column mode lets you conveniently edit two side-by-side columns
|
||
of text. It works using two side-by-side windows, each showing its
|
||
own buffer.
|
||
|
||
Here are three ways to enter two-column mode:
|
||
|
||
C-x 6 2 makes the current buffer into the left-hand buffer. In the
|
||
right-hand window it puts a buffer whose name is based on the current
|
||
buffer's name.
|
||
|
||
C-x 6 b BUFFER RET makes the current buffer into the left-hand buffer,
|
||
and uses buffer BUFFER as the right-hand buffer.
|
||
|
||
C-x 6 s splits the current buffer, which contains two-column text,
|
||
into two side-by-side buffers. The old current buffer becomes the
|
||
left-hand buffer, but the text in the right column is moved into the
|
||
right-hand buffer. The current column specifies the split point.
|
||
Splitting starts with the current line and continues to the end of the
|
||
buffer.
|
||
|
||
C-x 6 s takes a prefix argument which specifies how many characters
|
||
before point constitute the column separator. (The default argument
|
||
is 1, as usual, so by default the column separator is the character
|
||
before point.) Lines that don't have the column separator at the
|
||
proper place remain unsplit; they stay in the left-hand buffer, and
|
||
the right-hand buffer gets an empty line to correspond.
|
||
|
||
You can scroll both buffers together using C-x 6 SPC (scroll up), C-x
|
||
6 DEL (scroll down), and C-x 6 RET (scroll up one line). C-x 6 C-l
|
||
recenters both buffers together.
|
||
|
||
If you want to make a line which will span both columns, put it in
|
||
the left-hand buffer, with an empty line in the corresponding place in
|
||
the right-hand buffer.
|
||
|
||
When you have edited both buffers as you wish, merge them with C-x 6
|
||
1. This copies the text from the right-hand buffer as a second column
|
||
in the other buffer. To go back to two-column editing, use C-x 6 s.
|
||
|
||
Use C-x 6 d to dissociate the two buffers, leaving each as it
|
||
stands. (If the other buffer, the one that was not current when you
|
||
type C-x 6 d, is empty, C-x 6 d kills it.)
|
||
|
||
*** You can supply command arguments such as files to visit to an Emacs
|
||
that is already running. To do this, you must do this in your .emacs
|
||
file:
|
||
(add-hook 'suspend-hook #'resume-suspend-hook)
|
||
Also you must use the shellscript emacs.csh or emacs.sh, found in the
|
||
etc subdirectory.
|
||
|
||
*** Shell mode has been completely replaced.
|
||
The basic idea is the same, but there are new commands available in
|
||
this mode.
|
||
|
||
TAB now completes the file name before point in the shell buffer.
|
||
To get a list of all possible completions, type M-?.
|
||
|
||
There is a new convenient history mechanism for repeating previous
|
||
commands. Use the command M-p to recall the last command; it copies
|
||
the text of that command to the place where you are editing. If you
|
||
repeat M-p, it replaces the copied command with the previous command.
|
||
M-n is similar but goes in the opposite direction towards the present.
|
||
When you find the command you wanted, you can edit it, or just
|
||
resubmit it by typing RET.
|
||
|
||
You can also use M-r and M-s to search for (respectively) earlier or
|
||
later inputs starting with a given string. First type the string,
|
||
then type M-r to yank a previous input from the history which starts
|
||
with that string. You can repeat M-r to find successively earlier
|
||
inputs starting with the same string. You can start moving in the
|
||
opposite direction (toward more recent inputs) by typing M-s instead
|
||
of M-r. As long as you don't use any commands except M-r and M-s,
|
||
they keep using the same string that you had entered initially.
|
||
|
||
C-c C-o kills the last batch of output from a shell command. This is
|
||
useful if a shell command spews out lots of output that just gets in
|
||
the way.
|
||
|
||
C-c C-r scrolls to display the beginning of the last batch of output
|
||
at the top of the window; it also moves the cursor there.
|
||
|
||
C-a on a line that starts with a shell prompt moves to the end of the
|
||
prompt, not to the very beginning of the line.
|
||
|
||
C-d typed at the end of the shell buffer sends EOF to the subshell.
|
||
At any other position in the buffer, it deletes a character as usual.
|
||
|
||
If Emacs gets confused while trying to track changes in the shell's
|
||
current directory, type M-x dirs to re-synchronize.
|
||
|
||
M-x send-invisible reads a line of text without echoing it, and
|
||
sends it to the shell.
|
||
|
||
If you accidentally suspend your process, use M-x comint-continue-subjob
|
||
to continue it.
|
||
|
||
*** There is now a convenient way to enable flow control on terminals
|
||
where you can't win without it. Suppose you want to do this on
|
||
VT-100 and H19 terminals; put the following in your `.emacs' file:
|
||
|
||
(enable-flow-control-on "vt100" "h19")
|
||
|
||
When flow control is enabled, you must type C-\ to get the effect of a
|
||
C-s, and type C-^ to get the effect of a C-q.
|
||
|
||
The function 'enable-flow-control' enables flow control unconditionally.
|
||
|
||
** Changes in Dired
|
||
|
||
Dired has many new features which allow you to do these things:
|
||
|
||
- Rename, copy, or make links to many files at once.
|
||
|
||
- Make distinguishable types of marks for different operations.
|
||
|
||
- Display contents of subdirectories in the same Dired buffer as the
|
||
parent directory.
|
||
|
||
*** Setting and Clearing Marks
|
||
|
||
There are now two kinds of marker that you can put on a file in Dired:
|
||
'D' for deletion, and `*' for any other kind of operation.
|
||
The 'x' command deletes only files marked with 'D', and most
|
||
other Dired commands operate only on the files marked with `*'.
|
||
|
||
To mark files with 'D' (also called "flagging" the files), you
|
||
can use 'd' as usual. Here are some commands for marking with
|
||
`*' (and also for unmarking):
|
||
|
||
**** 'm' marks the current file with `*', for an operation other than
|
||
deletion.
|
||
|
||
**** `*' marks all executable files. With a prefix argument, it
|
||
unmarks all those files.
|
||
|
||
**** `@' marks all symbolic links. With a prefix argument, it unmarks
|
||
all those files.
|
||
|
||
**** `/' marks all directory files except `.' and `..'. With a prefix
|
||
argument, it unmarks all those files.
|
||
|
||
**** M-DEL removes a specific or all marks from every file. With an
|
||
argument, queries for each marked file. Type your help character,
|
||
usually C-h, at that time for help.
|
||
|
||
**** 'c' replaces all marks that use the character OLD with marks that
|
||
use the character NEW. You can use almost any character as a mark
|
||
character by means of this command, to distinguish various classes of
|
||
files. If OLD is ` ', then the command operates on all unmarked
|
||
files; if NEW is ` ', then the command unmarks the files it acts on.
|
||
|
||
*** Operating on Multiple Files
|
||
|
||
The Dired commands to operate directly on files (rename them, copy
|
||
them, and so on) have been generalized to work on multiple files.
|
||
There are also some additional commands in this series.
|
||
|
||
All of these commands use the same convention to decide which files to
|
||
manipulate:
|
||
|
||
- If you give the command a numeric prefix argument @var{n}, it operates
|
||
on the next @var{n} files, starting with the current file.
|
||
|
||
- Otherwise, if there are marked files, the commands operate on all the
|
||
marked files.
|
||
|
||
- Otherwise, the command operates on the current file only.
|
||
|
||
These are the commands:
|
||
|
||
**** 'C' copies the specified files. You must specify a directory to
|
||
copy into, or (if copying a single file) a new name.
|
||
|
||
If 'dired-copy-preserve-time' is non-'nil', then copying sets
|
||
the modification time of the new file to be the same as that of the old
|
||
file.
|
||
|
||
**** 'R' renames the specified files. You must specify a directory to
|
||
rename into, or (if renaming a single file) a new name.
|
||
|
||
Dired automatically changes the visited file name of buffers associated
|
||
with renamed files so that they refer to the new names.
|
||
|
||
**** 'H' makes hard links to the specified files. You must specify a
|
||
directory to make the links in, or (if making just one link) the name
|
||
to give the link.
|
||
|
||
**** 'S' makes symbolic links to the specified files. You must specify
|
||
a directory to make the links in, or (if making just one link) the
|
||
name to give the link.
|
||
|
||
**** 'M' changes the mode of the specified files. This calls the
|
||
'chmod' program, so you can describe the desired mode change with any
|
||
argument that 'chmod' would handle.
|
||
|
||
**** 'G' changes the group of the specified files.
|
||
|
||
**** 'O' changes the owner of the specified files. (On normal systems,
|
||
only the superuser can do this.)
|
||
|
||
The variable 'dired-chown-program' specifies the name of the
|
||
program to use to do the work (different systems put 'chown' in
|
||
different places.
|
||
|
||
**** 'Z' compresses or uncompresses the specified files.
|
||
|
||
**** 'L' loads the specified Emacs Lisp files.
|
||
|
||
**** 'B' byte compiles the specified Emacs Lisp files.
|
||
|
||
**** 'P' prints the specified files. It uses the variables
|
||
'lpr-command' and 'lpr-switches' just as 'lpr-file' does.
|
||
|
||
*** Shell Commands in Dired
|
||
|
||
`!' reads a shell command string in the minibuffer and runs the shell
|
||
command on all the specified files. There are two ways of applying a
|
||
shell command to multiple files:
|
||
|
||
- If you use `*' in the command, then the shell command runs just
|
||
once, with the list of file names substituted for the `*'.
|
||
|
||
Thus, `! tar cf foo.tar * RET' runs 'tar' on the entire list of file
|
||
names, putting them into one tar file `foo.tar'. The file names are
|
||
inserted in the order that they appear in the Dired buffer.
|
||
|
||
- If the command string doesn't contain `*', then it runs once for
|
||
each file, with the file name attached at the end. For example, `!
|
||
uudecode RET' runs 'uudecode' on each file.
|
||
|
||
To run the shell command once for each file but without being limited
|
||
to putting the file name inserted in the middle, use a shell loop.
|
||
For example, this shell command would run 'uuencode' on each of the
|
||
specified files, writing the output into a corresponding `.uu' file:
|
||
|
||
for file in *; uuencode $file $file >$file.uu; done
|
||
|
||
The working directory for the shell command is the top level directory
|
||
of the Dired buffer.
|
||
|
||
*** Regular Expression File Name Substitution
|
||
|
||
**** `% m REGEXP RET' marks all files whose names match the regular
|
||
expression REGEXP.
|
||
|
||
Only the non-directory part of the file name is used in matching. Use
|
||
`^' and `$' to anchor matches. Exclude subdirs by hiding them.
|
||
|
||
**** `% d REGEXP RET' flags for deletion all files whose names match
|
||
the regular expression REGEXP.
|
||
|
||
**** `% R', `% C', `% H', `% S'
|
||
|
||
These four commands rename, copy, make hard links and make soft links,
|
||
in each case computing the new name by regular expression substitution
|
||
from the name of the old file. They effectively perform
|
||
'query-replace-regexp' on the selected file names in the Dired buffer.
|
||
|
||
The commands read two arguments: a regular expression, and a
|
||
substitution pattern. Each selected file name is matched against the
|
||
regular expression, and then the part which matched is replaced with
|
||
the substitution pattern. You can use `\&' and `\DIGIT' in the
|
||
substitution pattern to refer to all or part of the old file name.
|
||
|
||
If the regular expression matches more than once in a file name,
|
||
only the first match is replaced.
|
||
|
||
Normally, the replacement process does not consider the directory names;
|
||
it operates on the file name within the directory. If you specify a
|
||
prefix argument of zero, then replacement affects entire file name.
|
||
|
||
To apply the command to all files matching the same regexp that you
|
||
use in the command, mark those files with `% m REGEXP RET', then use
|
||
the same regular expression in `% R'. To make this easier, `% R' uses
|
||
as a default the last regular expression specified in a `%' command.
|
||
|
||
*** Dired Case Conversion
|
||
|
||
**** `% u' renames each of the selected files to an upper case name.
|
||
|
||
**** `% l' renames each of the selected files to a lower case name.
|
||
|
||
*** File Comparison with Dired
|
||
|
||
**** '=' compares the current file with another file (the file at the
|
||
mark), by running the 'diff' program. The file at the mark is given
|
||
to 'diff' first.
|
||
|
||
**** 'M-=' compares the current file with its backup file. If there
|
||
are several numerical backups, it uses the most recent one. If this
|
||
file is a backup, it is compared with its original.
|
||
|
||
The backup file is the first file given to 'diff'.
|
||
|
||
*** Subdirectories in Dired
|
||
|
||
You can display more than one directory in one Dired buffer.
|
||
The simplest way to do this is to specify the options '-lR' for
|
||
running 'ls'. That produces a recursive directory listing showing
|
||
all subdirectories, all within the same Dired buffer.
|
||
|
||
You can also insert the contents of a particular subdirectory with the
|
||
'i' command. Use this command on the line that describes a file which
|
||
is a directory. Inserted subdirectory contents follow the top-level
|
||
directory of the Dired buffer, just as they do in `ls -lR' output.
|
||
|
||
If the subdirectory's contents are already present in the buffer, the
|
||
'i' command just moves to it (type 'l' to refresh it). It sets the
|
||
Emacs mark before moving, so C-x C-x takes you back to the old
|
||
position in the buffer.
|
||
|
||
When you have subdirectories in the Dired buffer, you can use the page
|
||
motion commands C-x [ and C-x ] to move by entire directories.
|
||
|
||
The following commands move up and down in the tree of directories
|
||
in one Dired buffer:
|
||
|
||
**** C-M-u Go up to the parent directory's headerline.
|
||
|
||
**** C-M-d Go down in the tree, to the first subdirectory's
|
||
headerline.
|
||
|
||
**** C-M-n Go to next subdirectory headerline, regardless of level.
|
||
|
||
**** C-M-p Go to previous subdirectory headerline, regardless of
|
||
level.
|
||
|
||
*** Hiding Subdirectories
|
||
|
||
"Hiding" a subdirectory means to make it invisible, except for its
|
||
headerline. Files inside a hidden subdirectory are never considered
|
||
by Dired. For example, the commands to operate on marked files ignore
|
||
files in hidden directories even if they are marked.
|
||
|
||
**** `$' hides or unhides the current subdirectory and move to next
|
||
subdirectory. A prefix argument serves as a repeat count.
|
||
|
||
**** `M-$' hides all subdirectories, leaving only their header lines.
|
||
Or, if at least one subdirectory is currently hidden, it makes
|
||
everything visible again. You can use this command to get an overview
|
||
in very deep directory trees or to move quickly to subdirectories far
|
||
away.
|
||
|
||
*** Editing the Dired Buffer
|
||
|
||
**** 'l' updates the specified files in a Dired buffer. This means
|
||
reading their current status from the file system and changing the
|
||
buffer to reflect it properly.
|
||
|
||
If you use this command on a subdirectory header line, it updates the
|
||
contents of the subdirectory.
|
||
|
||
**** 'g' updates the entire contents of the Dired buffer. It preserves
|
||
all marks except for those on files that have vanished. Hidden
|
||
subdirectories are updated but remain hidden.
|
||
|
||
**** 'k' kills all marked lines (not the files). With a prefix
|
||
argument, it kills that many lines starting with the current line.
|
||
|
||
This command does not delete files; it just deletes text from the Dired
|
||
buffer.
|
||
|
||
If you kill the line for a file that is a directory, then its contents
|
||
are also deleted from the buffer. Typing `C-u k' on the header line
|
||
for a subdirectory is another way to delete a subdirectory from the
|
||
Dired buffer.
|
||
|
||
*** 'find' and Dired.
|
||
|
||
To search for files with names matching a wildcard pattern use
|
||
'find-name-dired'. Its arguments are DIRECTORY and
|
||
PATTERN. It selects all the files in DIRECTORY or its
|
||
subdirectories whose own names match PATTERN.
|
||
|
||
The files thus selected are displayed in a Dired buffer in which the
|
||
ordinary Dired commands are available.
|
||
|
||
If you want to test the contents of files, rather than their names, use
|
||
'find-grep-dired'. This command takes two minibuffer arguments,
|
||
DIRECTORY and REGEXP; it selects all the files in
|
||
DIRECTORY or its subdirectories that contain a match for
|
||
REGEXP. It works by running 'find' and 'grep'.
|
||
|
||
The most general command in this series is 'find-dired', which lets
|
||
you specify any condition that 'find' can test. It takes two
|
||
minibuffer arguments, DIRECTORY and FIND-ARGS; it runs 'find' in
|
||
DIRECTORY with using FIND-ARGS as the arguments to 'find' specifying
|
||
which files to accept. To use this command, you need to know how to
|
||
use 'find'.
|
||
|
||
** New amusements and novelties.
|
||
|
||
*** `M-x mpuz' displays a multiplication puzzle, in which each letter
|
||
stands for a digit, and you must determine which digit. The puzzles
|
||
are determined randomly, so they are always different.
|
||
|
||
*** `M-x gomoku' plays the game Gomoku with you. It needs more work.
|
||
|
||
*** `M-x spook' adds a line of randomly chosen keywords to an outgoing
|
||
mail message. The keywords are chosen from a list of words that
|
||
suggest you are discussing something subversive.
|
||
|
||
The idea is that the NSA reads all messages that contain keywords
|
||
suggesting they might be interested, and that adding these lines could
|
||
help to overload them. I would guess that they have modified their
|
||
program by now to ignore these lines of keywords; perhaps the program
|
||
can be updated if some clever hacker can determine what criterion they
|
||
actually use now.
|
||
|
||
** Installation changes
|
||
|
||
*** The configure script has been provided to help with the
|
||
installation process. It takes the place of editing the Makefiles and
|
||
src/config.h, and can often guess the appropriate operating system to
|
||
use for a particular machine type. See INSTALL for a more detailed
|
||
description of the steps required for installation.
|
||
|
||
*** If you create a Lisp file named `site-start.el', Emacs loads the file
|
||
whenever it starts up.
|
||
|
||
*** A new Lisp variable, 'data-directory', indicates the directory
|
||
containing the DOC file, tutorial, copying agreement, and other
|
||
familiar 'etc' files. The value of 'data-directory' is a simple string.
|
||
The default should be set at build time, and the person installing
|
||
Emacs should place all the data files in this directory. The `help.el'
|
||
functions that look for docstrings and information files check this
|
||
variable. All Emacs Lisp packages should also be coded so that they
|
||
refer to 'data-directory' to find data files.
|
||
|
||
*** The PURESIZE definition has been moved from config.h to its own
|
||
file, puresize.h. Since almost every file of C source in the
|
||
distribution depends on config.h, but only alloc.c and data.c depend
|
||
on puresize.h, this means that changing the value of PURESIZE causes
|
||
only those two files to be recompiled.
|
||
|
||
*** The makefile at the top of the Emacs source tree now supports a
|
||
'dist' target, which creates a compressed tar file suitable for
|
||
distribution, using the contents of the source tree. Object files,
|
||
old file versions, executables, DOC files, and other
|
||
architecture-specific or easy-to-recreate files are not included in
|
||
the tar file.
|
||
|
||
|
||
|
||
----------------------------------------------------------------------
|
||
This file is part of GNU Emacs.
|
||
|
||
GNU Emacs is free software: you can redistribute it and/or modify
|
||
it under the terms of the GNU General Public License as published by
|
||
the Free Software Foundation, either version 3 of the License, or
|
||
(at your option) any later version.
|
||
|
||
GNU Emacs is distributed in the hope that it will be useful,
|
||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
GNU General Public License for more details.
|
||
|
||
You should have received a copy of the GNU General Public License
|
||
along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
|
||
|
||
|
||
Local variables:
|
||
mode: outline
|
||
paragraph-separate: "[ ]*$"
|
||
end:
|