Scroll bars are now on the left side of the window.
The mode line no longer includes the string Emacs. This makes more space in the mode line for other information.
Emacs has a new facility for customization of its many user options. It is called M-x customize. With this facility you can look at the many user options in an organized way; they are grouped into a tree structure.
M-x customize also knows what sorts of values are legitimate for each user option and ensures that you don't use invalid values.
With M-x customize, you can set options either for the present Emacs session or permanently. (Permanent settings are stored automatically in your .emacs file.)
When you select a region with the mouse, it is highlighted immediately afterward. At that time, if you type the DELETE key, it kills the region.
The BACKSPACE key, and the ASCII character DEL, do not do this; they delete the character before point, as usual.
In an incremental search the whole current match is highlighted on terminals which support this. (You can disable this feature by setting search-highlight to nil.)
In the minibuffer, in some cases, you can now use M-n to insert the default value into the minibuffer as text. In effect, the default value (if the minibuffer routines know it) is tacked onto the history "in the future". (The more normal use of the history list is to use M-p insert minibuffer input used in the past.)
In Text mode, now only blank lines separate paragraphs. This makes it possible to get the full benefit of Adaptive Fill mode in Text mode, and other modes derived from it (such as Mail mode). TAB in Text mode now runs the command indent-relative; this makes a practical difference only when you use indented paragraphs.
As a result, the old Indented Text mode is now identical to Text mode, and is an alias for it.
If you want spaces at the beginning of a line to start a paragraph, use the new mode, Paragraph Indent Text mode.
Scrolling changes
Scroll commands to scroll a whole screen now preserve the screen position of the cursor, if scroll-preserve-screen-position is non-nil.
In this mode, if you scroll several screens back and forth, finishing on the same screen where you started, the cursor goes back to the line where it started.
If you set scroll-conservatively to a small number, then when you move point a short distance off the screen, Emacs will scroll the screen just far enough to bring point back on screen, provided that does not exceed scroll-conservatively lines.
The new variable scroll-margin says how close point can come to the top or bottom of a window. It is a number of screen lines; if point comes within that many lines of the top or bottom of the window, Emacs recenters the window.
Emacs now supports a wide variety of international character sets, including European variants of the Latin alphabet, as well as Chinese, Devanagari (Hindi and Marathi), Ethiopian, Greek, IPA, Japanese, Korean, Lao, Russian, Thai, Tibetan, and Vietnamese scripts. These features have been merged from the modified version of Emacs known as MULE (for "MULti-lingual Enhancement to GNU Emacs")
Users of these scripts have established many more-or-less standard coding systems for storing files. Emacs uses a single multibyte character encoding within Emacs buffers; it can translate from a wide variety of coding systems when reading a file and can translate back into any of these coding systems when saving a file.
Keyboards, even in the countries where these character sets are used, generally don't have keys for all the characters in them. So Emacs supports various "input methods", typicaly one for each script or language, to make it possible to type them.
The Emacs internal multibyte encoding represents a non-ASCII character a sequence of bytes in the range 0200 through 0377.
The new prefix key C-x RET is used for commands that pertain to multibyte characters, coding systems, and input methods.
You can disable multibyte character support as follows:
(setq-default enable-multibyte-characters nil)
Calling the function standard-display-european turns off multibyte characters, unless you specify a non-nil value for the second argument, AUTO. This provides compatibility for people who are already using standard-display-european to continue using single-byte characters for their work until they want to change.
An input method is a kind of character conversion which is designed specifically for interactive input. In Emacs, typically each language has its own input method (though sometimes several languages which use the same characters can share one input method). Some languages support several input methods.
The simplest kind of input method works by mapping ASCII letters into another alphabet. This is how the Greek and Russian input methods work.
A more powerful technique is composition: converting sequences of characters into one letter. Many European input methods use composition to produce a single non-ASCII letter from a sequence which consists of a letter followed by diacritics. For example, a' is one sequence of two characters that might be converted into a single letter.
The input methods for syllabic scripts typically use mapping followed by conversion. The input methods for Thai and Korean work this way. First, letters are mapped into symbols for particular sounds or tone marks; then, sequences of these which make up a whole syllable are mapped into one syllable sign--most often a "composite character".
None of these methods works very well for Chinese and Japanese, so they are handled specially. First you input a whole word using phonetic spelling; then, after the word is in the buffer, Emacs converts it into one or more characters using a large dictionary.
Since there is more than one way to represent a phonetically spelled word using Chinese characters, Emacs can only guess which one to use; typically these input methods give you a way to say "guess again" if the first guess is wrong.
The command C-x RET m (toggle-enable-multibyte-characters) turns multibyte character support on or off for the current buffer.
If multibyte character support is turned off in a buffer, then each byte is a single character, even codes 0200 through 0377--exactly as they did in Emacs 19.34. This includes the features for support for the European character, ISO Latin-1 and ISO Latin-2.
However, there is no need to turn off multibyte character support to use ISO Latin-1 or ISO Latin-2; the Emacs multibyte character set includes all the characters in these character sets, and Emacs can translate automatically to and from either one.
Turning off multibyte character support in the buffer after visiting a file with multibyte code conversion will display the multibyte sequences already in the buffer, byte by byte. This is probably not what you want.
If you want to edit a file of single-byte characters (Latin-1, for example), you can do it by specifying no-conversion as the coding system when reading the file. This coding system also turns off multibyte characters in that buffer.
If you turn off multibyte character support entirely, this turns off character conversion as well.
A font for X typically displays just one alphabet or script. Therefore, displaying the entire range of characters Emacs supports requires using many fonts.
Therefore, Emacs now supports fontsets. Each fontset is a collection of fonts, each assigned to a range of character codes.
A fontset has a name, like a font. Individual fonts are defined by the X server; fontsets are defined within Emacs itself. But once you have defined a fontset, you can use it in a face or a frame just as you would use a font.
If a fontset specifies no font for a certain character, or if it specifies a font that does not exist on your system, then it cannot display that character. It will display an empty box instead.
The fontset height and width are determined by the ASCII characters (that is, by the font in the fontset which is used for ASCII characters). If another font in the fontset has a different height, or the wrong width, then characters assigned to that font are clipped, and displayed within a box if highlight-wrong-size-font is non-nil.
Emacs does not use any fontset by default. Its default font is still chosen as in previous versions. You can tell Emacs to use a fontset with the -fn option or the Font X resource.
Emacs creates a standard fontset automatically according to the value of standard-fontset-spec. This fontset's short name is fontset-standard. Bold, italic, and bold-italic variants of the standard fontset are created automatically.
If you specify a default ASCII font with the Font resource or -fn argument, a fontset is generated from it. This works by replacing the FOUNDARY, FAMILY, ADD_STYLE, and AVERAGE_WIDTH fields of the font name with * then using this to specify a fontset. This fontset's short name is fontset-startup.
Emacs checks resources of the form Fontset-N where N is 0, 1, 2...
The resource value should have this form:
FONTSET-NAME, [CHARSET-NAME:FONT-NAME]...
FONTSET-NAME should have the form of a standard X font name, except:
Each of these fontsets has an alias which is made from the last two font name fields, CHARSET_REGISTRY and CHARSET_ENCODING. You can refer to the fontset by that alias or by its full name.
For any character sets that you don't mention, Emacs tries to choose a
font by substituting into FONTSET-NAME. For instance,
with the following resource,
Emacs*Fontset-0:-*-fixed-medium-r-normal-*-24-*-*-*-*-*-fontset-24
the font for ASCII is generated as below:
-*-fixed-medium-r-normal-*-24-*-ISO8859-1 Here is the
substitution rule:
Change CHARSET_REGISTRY and
CHARSET_ENCODING to
that of the charset
defined in the variable x-charset-registries. For instance, ASCII has
the entry (ascii . "ISO8859-1") in this variable. Then, reduce
sequences of wild cards -*-...-*- with a single
wildcard -*-.
(This is to prevent use of auto-scaled fonts.)
The function which processes the fontset resource value to create the fontset is called create-fontset-from-fontset-spec. You can also call that function explicitly to create a fontset.
With the X resource Emacs.Font, you can specify a fontset name just like an actual font name. But be careful not to specify a fontset name in a wildcard resource like Emacs*Font--that tries to specify the fontset for other purposes including menus, and they cannot handle fontsets.
Selecting a language environment typically specifies a default input method and which coding systems to recognize automatically when visiting files. However, it does not try to reread files you have already visited; the text in those buffers is not affected. The language environment may also specify a default choice of coding system for new files that you create.
It makes no difference which buffer is current when you use set-language-environment, because these defaults apply globally to the whole Emacs session.
The command C-x RET f (set-buffer-file-coding-system) specifies the file coding system for the current buffer. This specifies what sort of character code translation to do when saving the file. As an argument, you must specify the name of one of the coding systems that Emacs supports.
The command C-x RET c (universal-coding-system-argument) lets you specify a coding system when you read or write a file. This command uses the minibuffer to read a coding system name. After you exit the minibuffer, the specified coding system is used for the immediately following command.
So if the immediately following command is a command to read or write a file, it uses the specified coding system for that file.
If the immediately following command does not use the coding system, then C-x RET c ultimately has no effect.
For example, C-x RET c iso-8859-1 RET C-x C-f temp RET visits the file temp treating it as ISO Latin-1.
You can specify the coding system for a file using the -*- construct. Include coding: CODINGSYSTEM; inside the -*-...-*- to specify use of coding system CODINGSYSTEM. You can also specify the coding system in a local variable list at the end of the file.
The command C-x RET t (set-terminal-coding-system) specifies the coding system for terminal output. If you specify a character code for terminal output, all characters output to the terminal are translated into that characters code.
This feature is useful for certain character-only terminals built in various countries to support the languages of those countries.
By default, output to the terminal is not translated at all.
The command C-x RET k (set-keyboard-coding-system) specifies the coding system for keyboard input.
Character code translation of keyboard input is useful for terminals with keys that send non-ASCII graphic characters--for example, some terminals designed for ISO Latin-1 or subsets of it.
By default, keyboard input is not translated at all.
Character code translation of keyboard input is similar to using an input method, in that both define sequences of keyboard input that translate into single characters. However, input methods are designed to be convenient for interactive use, while the code translations are designed to work with terminals.
The command C-x RET p (set-buffer-process-coding-system) specifies the coding system for input and output to a subprocess. This command applies to the current buffer; normally, each subprocess has its own buffer, and thus you can use this command to specify translation to and from a particular subprocess by giving the command in the corresponding buffer.
By default, process input and output are not translated at all.
The variable file-name-coding-system specifies the coding system to use for encoding file names before operating on them. It is also used for decoding file names obtained from the system.
The command C-\ (toggle-input-method) activates or inactivates an input method. If no input method has been selected before, the command prompts for you to specify the language and input method you want to use.
C-u C-\ (select-input-method) lets you switch to a different input method. C-h C-\ (or C-h I) describes the current input nethod.
Some input methods remap the keyboard to emulate various keyboard layouts commonly used for particular scripts. How to do this remapping properly depends on your actual keyboard layout. To specify which layout your keyboard has, use M-x quail-set-keyboard-layout.
The command C-h C (describe-coding-system) displays the coding systems currently selected for various purposes, plus related information.
The command C-h h (view-hello-file) displays a file called HELLO, which has examples of text in many languages, using various scripts.
The command C-h L (describe-language-support) displays information about the support for a particular language. You specify the language as an argument.
The mode line now contains a letter or character that identifies the coding system used in the visited file. It normally follows the first dash.
A dash indicates the default state of affairs: no code conversion, (except CRLF => newline if appropriate). `=' means no conversion whatsoever. The ISO 8859 coding systems are represented by digits 1 through 9. Other coding systems are represented by letters:
The new variable rmail-file-coding-system specifies the code conversion to use for RMAIL files. The default value is nil.
When you read mail with Rmail, each message is decoded automatically into Emacs' internal format. This has nothing to do with rmail-file-coding-system. That variable controls reading and writing Rmail files themselves.
The new variable sendmail-coding-system specifies the code conversion for outgoing mail. The default value is nil.
Actually, there are three different ways of specifying the coding system for sending mail:
The command C-h t (help-with-tutorial) accepts a prefix argument to specify the language for the tutorial file. Currently, English, Japanese, Korean and Thai are supported. We welcome additional translations.
An easy new way to visit a file with no code or format conversion of any kind: Use M-x find-file-literally. There is also a command insert-file-literally which inserts a file into the current buffer without any conversion.
C-q's handling of octal character codes is changed. You can now specify any number of octal digits. RET terminates the digits and is discarded; any other non-digit terminates the digits and is then used as input.
There are new commands for looking up Info documentation for functions, variables and file names used in your programs.
Type M-x info-lookup-symbol to look up a symbol in the buffer at point. Type M-x info-lookup-file to look up a file in the buffer at point.
Precisely which Info files are used to look it up depends on the major mode. For example, in C mode, the GNU libc manual is used.
M-TAB in most programming language modes now runs the command complete-symbol. This command performs completion on the symbol name in the buffer before point.
With a numeric argument, it performs completion based on the set of symbols documented in the Info files for the programming language that you are using.
With no argument, it does completion based on the current tags tables, just like the old binding of M-TAB (complete-tag).
File locking works with NFS now.
The lock file for FILENAME is now a symbolic link named .#FILENAME, in the same directory as FILENAME.
This means that collision detection between two different machines now works reasonably well; it also means that no file server or directory can become a bottleneck.
The new method does have drawbacks. It means that collision detection does not operate when you edit a file in a directory where you cannot create new files. Collision detection also doesn't operate when the file server does not support symbolic links. But these conditions are rare, and the ability to have collision detection while using NFS is so useful that the change is worth while.
When Emacs or a system crashes, this may leave behind lock files which are stale. So you may occasionally get warnings about spurious collisions. When you determine that the collision is spurious, just tell Emacs to go ahead anyway.
If you wish to use Show Paren mode to display matching parentheses, it is no longer sufficient to load paren.el. Instead you must call show-paren-mode.
If you wish to use Delete Selection mode to replace a highlighted selection when you insert new text, it is no longer sufficient to load delsel.el. Instead you must call the function delete-selection-mode.
If you wish to use Partial Completion mode to complete partial words within symbols or filenames, it is no longer sufficient to load complete.el. Instead you must call the function partial-completion-mode.
If you wish to use uniquify to rename buffers for you, it is no longer sufficient to load uniquify.el. You must also set uniquify-buffer-name-style to one of the non-nil legitimate values.
Changes in View mode.
Several new commands are available in View mode. Do H in view mode for a list of commands.
There are two new commands for entering View mode: view-file-other-frame and view-buffer-other-frame.
Exiting View mode does a better job of restoring windows to their previous state.
New customization variable view-scroll-auto-exit. If non-nil, scrolling past end of buffer makes view mode exit.
New customization variable view-exits-all-viewing-windows. If non-nil, view-mode will at exit restore all windows viewing buffer, not just the selected window.
New customization variable view-read-only. If non-nil, visiting a read-only file automatically enters View mode, and toggle-read-only turns View mode on or off.
New customization variable view-remove-frame-by-deleting controls how to remove a not needed frame at view mode exit. If non-nil, delete the frame, if nil make an icon of it.
C-x v l, the command to print a file's version control log, now positions point at the entry for the file's current branch version.
C-x v =, the command to compare a file with the last checked-in version, has a new feature. If the file is currently not locked, so that it is presumably identical to the last checked-in version, the command now asks which version to compare with.
When using hideshow.el incremental search can temporary show hidden blocks if a match is inside the block.
The block is hided again if the search is continued and the next match is outside the block. By customizing the variable isearch-hide-immediately you can choose to hide all the temporary shown blocks only when exiting from incremental search.
By customizing the variable hs-isearch-open you can choose what kind of blocks to temporary show during isearch: comment blocks, code blocks, all of them or none.
The new command C-x 4 0 (kill-buffer-and-window) kills the current buffer and deletes the selected window. It asks for confirmation first.
C-x C-w, which saves the buffer into a specified file name, now changes the major mode according to that file name. However, the mode will not be changed if
However, if you set change-major-mode-with-file-name to nil, then these commands do not change the major mode.
M-x occur changes.
If the argument to M-x occur contains upper case letters, it performs a case-sensitive search.
In the *Occur* buffer made by M-x occur, if you type g or M-x revert-buffer, this repeats the search using the same regular expression and the same buffer as before.
In Transient Mark mode, the region in any one buffer is highlighted in just one window at a time. At first, it is highlighted in the window where you set the mark. The buffer's highlighting remains in that window unless you select to another window which shows the same buffer--then the highlighting moves to that window.
The feature to suggest key bindings when you use M-x now operates after the command finishes. The message suggesting key bindings appears temporarily in the echo area. The previous echo area contents come back after a few seconds, in case they contain useful information.
Outline mode changes.
Outline mode now uses overlays (this is the former noutline.el).
Incremental searches skip over invisible text in Outline mode.
When a minibuffer window is active but not the selected window, if you try to use the minibuffer, you used to get a nested minibuffer. Now, this not only gives an error, it also cancels the minibuffer that was already active.
The motive for this change is so that beginning users do not unknowingly move away from minibuffers, leaving them active, and then get confused by it.
If you want to be able to have recursive minibuffers, you must set enable-recursive-minibuffers to non-nil.
Changes in dynamic abbrevs.
Expanding dynamic abbrevs with M-/ is now smarter about case conversion. If the expansion has mixed case not counting the first character, and the abbreviation matches the beginning of the expansion including case, then the expansion is copied verbatim.
The expansion is also copied verbatim if the abbreviation itself has mixed case. And using SPC M-/ to copy an additional word always copies it verbatim except when the previous copied word is all caps.
The values of dabbrev-case-replace and dabbrev-case-fold-search are no longer Lisp expressions. They have simply three possible values.
Minibuffer history lists are truncated automatically now to a certain length. The variable history-length specifies how long they can be. The default value is 30.
Changes in Mail mode.
The key C-x m no longer runs the mail command directly. Instead, it runs the command compose-mail, which invokes the mail composition mechanism you have selected with the variable mail-user-agent. The default choice of user agent is sendmail-user-agent, which gives behavior compatible with the old behavior.
C-x 4 m now runs compose-mail-other-window, and C-x 5 m runs compose-mail-other-frame.
While composing a reply to a mail message, you can use the command C-c C-r to cite just the region from the message you are replying to. This copies the text which is the selected region in the buffer that shows the original message.
The command C-c C-i inserts a file at the end of the message, with separator lines around the contents.
The command M-x expand-mail-aliases expands all mail aliases in suitable mail headers. Emacs automatically extracts mail alias definitions from your mail alias file (e.g., ~/.mailrc). You do not need to expand mail aliases yourself before sending mail.
New features in the mail-complete command.
The mail-complete command now inserts the user's full name, for local users or if that is known. The variable mail-complete-style controls the style to use, and whether to do this at all. Its values are like those of mail-from-style.
The variable mail-passwd-command lets you specify a shell command to run to fetch a set of password-entries that add to the ones in /etc/passwd.
The variable mail-passwd-file now specifies a list of files to read to get the list of user ids. By default, one file is used: /etc/passwd.
You can "quote" a file name to inhibit special significance of special syntax, by adding /: to the beginning. Thus, if you have a directory named /foo:, you can prevent it from being treated as a reference to a remote host named `foo' by writing it as /:/foo:.
Emacs uses this new construct automatically when necessary, such as when you start it with a working directory whose name might otherwise be taken to be magic.
There is a new command M-x grep-find which uses find to select files to search through, and grep to scan them. The output is available in a Compile mode buffer, as with M-x grep.
M-x grep now uses the -e option if the grep program supports that. (-e prevents problems if the search pattern starts with a dash.)
In Dired, the & command now flags for deletion the files whose names suggest they are probably not needed in the long run.
In Dired, * is now a prefix key for mark-related commands.
new key dired.el binding old key ------- ---------------- ------- * c dired-change-marks c * m dired-mark m * * dired-mark-executables * (binding deleted) * / dired-mark-directories / (binding deleted) * @ dired-mark-symlinks @ (binding deleted) * u dired-unmark u * DEL dired-unmark-backward DEL * ? dired-unmark-all-files M-C-? * ! dired-unmark-all-marks * % dired-mark-files-regexp % m * C-n dired-next-marked-file M-} * C-p dired-prev-marked-file M-{
Rmail changes.
When Rmail cannot convert your incoming mail into Babyl format, it saves the new mail in the file RMAILOSE.n, where n is an integer chosen to make a unique name. This way, Rmail will not keep crashing each time you run it.
In Rmail, the variable rmail-summary-line-count-flag now controls whether to include the line count in the summary. Non-nil means yes.
In Rmail summary buffers, d and C-d (the commands to delete messages) now take repeat counts as arguments. A negative argument means to move in the opposite direction.
In Rmail, the t command now takes an optional argument which lets you specify whether to show the message headers in full or pruned.
In Rmail, the new command w (rmail-output-body-to-file) writes just the body of the current message into a file, without the headers. It takes the file name from the message subject, by default, but you can edit that file name in the minibuffer before it is actually used for output.
Gnus changes.
nntp.el has been totally rewritten in an asynchronous fashion.
Article prefetching functionality has been moved up into Gnus.
Scoring can now be performed with logical operators like and, or, not, and parent redirection.
Article washing status can be displayed in the article mode line.
gnus.el has been split into many smaller files.
Suppression of duplicate articles based on Message-ID.
(setq gnus-suppress-duplicates t)
New variables for specifying what score and adapt files are to be considered home score and adapt files. See gnus-home-score-file and gnus-home-adapt-files.
Groups can inherit group parameters from parent topics.
Article editing has been revamped and is now usable.
Signatures can be recognized in more intelligent fashions. See gnus-signature-separator and gnus-signature-limit.
Summary pick mode has been made to look more nn-like. Line numbers are displayed and the . command can be used to pick articles.
Commands for moving the .newsrc.eld from one server to
another have been added.
M-x gnus-change-server
A way to specify that "uninteresting" fields be suppressed when generating lines in buffers.
Several commands in the group buffer can be undone with M-C-_
Scoring can be done on words using the new score type w.
Adaptive scoring can be done on a Subject word-by-word basis:
(setq gnus-use-adaptive-scoring '(word))
Scores can be decayed.
(setq gnus-decay-scores t)
Scoring can be performed using a regexp on the Date header. The Date is normalized to compact ISO 8601 format first.
A new command has been added to remove all data on articles from
the native server.
M-x gnus-group-clear-data-on-native-groups
A new command for reading collections of documents (nndoc with nnvirtual on top) has been added -- M-C-d.
Process mark sets can be pushed and popped.
A new mail-to-news backend makes it possible to post even when the NNTP server doesn't allow posting.
A new backend for reading searches from Web search engines (DejaNews, Alta Vista, InReference) has been added.
Use the G w command in the group buffer to create such a group.
Groups inside topics can now be sorted using the standard sorting functions, and each topic can be sorted independently.
See the commands under the T S submap.
Subsets of the groups can be sorted independently.
See the commands under the G P submap.
Cached articles can be pulled into the groups.
Use the Y c command.
Score files are now applied in a more reliable order.
Reports on where mail messages end up can be generated.
M-x nnmail-split-history
More hooks and functions have been added to remove junk from incoming mail before saving the mail. See nnmail-prepare-incoming-header-hook.
The nnml mail backend now understands compressed article files.
To enable Gnus to read/post multi-lingual articles, you must execute
the following code, for instance, in your .emacs.
(add-hook 'gnus-startup-hook 'gnus-mule-initialize)
Then, when you start Gnus, it will decode non-ASCII text automatically
and show appropriate characters. (Note: if you are using gnus-mime
from the SEMI package, formerly known as TM, you should NOT add this
hook to gnus-startup-hook; gnus-mime has its own method of handling
this issue.)
Since it is impossible to distinguish all coding systems
automatically, you may need to specify a choice of coding system for a
particular news group. This can be done by:
(gnus-mule-add-group NEWSGROUP 'CODING-SYSTEM)
Here NEWSGROUP should be a string which names a newsgroup
or a tree of newsgroups. If NEWSGROUP is
"XXX.YYY", all news groups under "XXX.YYY"
(including "XXX.YYY.ZZZ") will use the specified coding system.
CODING-SYSTEM specifies which coding system to use (for both for
reading and posting.
CODING-SYSTEM can also be a cons cell of the form
(READ-CODING-SYSTEM . POST-CODING-SYSTEM)
Then READ-CODING-SYSTEM is used when you read messages from the
newsgroups, while POST-CODING-SYSTEM is used when you post messages
there.
Emacs knows the right coding systems for certain newsgroups by
default. Here are some of these default settings:
(gnus-mule-add-group "fj" 'iso-2022-7)
(gnus-mule-add-group "alt.chinese.text" 'hz-gb-2312)
(gnus-mule-add-group "alt.hk" 'hz-gb-2312)
(gnus-mule-add-group "alt.chinese.text.big5" 'cn-big5)
(gnus-mule-add-group "soc.culture.vietnamese" '(nil . viqr))
When you replay by mail to an articles, these settings are ignored; the mail is encoded according to sendmail-coding-system, as usual.
CC mode changes.
If you edit primarily one style of C (or C++, Objective-C, Java) code, you may want to make the CC Mode style variables have global values so that you can set them directly in your .emacs file. To do this, set c-style-variables-are-local-p to nil in your .emacs file. Note that this only takes effect if you do it before cc-mode.el is loaded.
If you typically edit more than one style of C (or C++, Objective-C, Java) code in a single Emacs session, you may want to make the CC Mode style variables have buffer local values. By default, all buffers share the same style variable settings; to make them buffer local, set c-style-variables-are-local-p to t in your .emacs file. Note that you must do this before CC Mode is loaded.
The new variable c-indentation-style holds the C style name of the current buffer.
The variable c-block-comments-indent-p has been deleted, because it is no longer necessary. C mode now handles all the supported styles of block comments, with no need to say which one you will use.
There is a new indentation style python, which specifies the C style that the Python developers like.
There is a new c-cleanup-list option: brace-elseif-brace. This says to put ...} else if (...) {... on one line, just as brace-else-brace says to put ...} else {... on one line.
VC Changes [new]
In vc-retrieve-snapshot (C-x v r), if you don't specify a snapshot name, it retrieves the latest versions of all files in the current directory and its subdirectories (aside from files already locked).
This feature is useful if your RCS directory is a link to a common master directory, and you want to pick up changes made by other developers.
You can do the same thing for an individual file by typing C-u C-x C-q RET in a buffer visiting that file.
VC can now handle files under CVS that are being "watched" by other developers. Such files are made read-only by CVS. To get a writable copy, type C-x C-q in a buffer visiting such a file. VC then calls "cvs edit", which notifies the other developers of it.
vc-version-diff (C-u C-x v =) now suggests reasonable defaults for version numbers, based on the current state of the file.
Calendar changes.
A new function, list-holidays, allows you list holidays or subclasses of holidays for ranges of years. Related menu items allow you do this for the year of the selected date, or the following/previous years.
ps-print changes
There are some new user variables for customizing the page layout.
Paper size, paper orientation, columns
The variable ps-paper-type determines the size of paper ps-print formats for; it should contain one of the symbols: a4 a3 letter legal letter-small tabloid ledger statement executive a4small b4 b5 It defaults to letter . If you need other sizes, see the variable ps-page-dimensions-database .
The variable ps-landscape-mode determines the orientation of the printing on the page. nil, the default, means "portrait" mode, non-nil means "landscape" mode.
The variable ps-number-of-columns must be a positive integer. It determines the number of columns both in landscape and portrait mode. It defaults to 1.
Horizontal layout
The horizontal layout is determined by the variables ps-left-margin , ps-inter-column , and ps-right-margin . All are measured in points.
Vertical layout
The vertical layout is determined by the variables ps-bottom-margin, ps-top-margin, and ps-header-offset . All are measured in points.
Headers
If the variable ps-print-header is nil, no header is printed. Then ps-header-offset is not relevant and ps-top-margin represents the margin above the text.
If the variable ps-print-header-frame is non-nil, a gaudy framing box is printed around the header.
The contents of the header are determined by ps-header-lines , ps-show-n-of-n , ps-left-header and ps-right-header .
The height of the header is determined by ps-header-line-pad , ps-header-font-family , ps-header-title-font-size and ps-header-font-size .
Font managing
The variable ps-font-family determines which font family is to be used for ordinary text. Its value must be a key symbol in the alist ps-font-info-database . You can add other font families by adding elements to this alist.
The variable ps-font-size determines the size of the font for ordinary text. It defaults to 8.5 points.
hideshow changes.
now supports hiding of blocks of single line comments (like // for C++, ; for lisp).
Support for java-mode added.
When doing hs-hide-all it is now possible to also hide the comments in the file if hs-hide-comments-when-hiding-all is set.
The new function hs-hide-initial-comment hides the the comments at the beginning of the files. Finally those huge RCS logs don't stay in your way! This is run by default when entering the hs-minor-mode.
Now uses overlays instead of selective-display, so is more robust and a lot faster.
A block beginning can span multiple lines.
The new variable hs-show-hidden-short-form if t, determine hideshow to show only the beggining of a block in when it is hidden. See the documentation for more details.
Changes in Enriched mode.
When you visit a file in enriched-mode, Emacs will make sure it is filled to the current fill-column. This behavior is now independent of the size of the window. When you save the file, the fill-column in use is stored as well, so that the whole buffer need not be refilled the next time unless the fill-column is different.
use-hard-newlines is now a minor mode. When it is enabled, Emacs distinguishes between hard and soft newlines, and treats hard newlines as paragraph boundaries. Otherwise all newlines inserted are marked as soft, and paragraph boundaries are determined solely from the text.
Font Lock mode
Custom support
The variables font-lock-face-attributes, font-lock-display-type and font-lock-background-mode are now obsolete; the recommended way to specify the faces to use for Font Lock mode is with M-x customize-group on the new custom group font-lock-highlighting-faces. If you set font-lock-face-attributes in your ~/.emacs file, Font Lock mode will respect its value. However, you should consider converting from setting that variable to using M-x customize.
You can still use X resources to specify Font Lock face appearances.
Maximum decoration
Fontification now uses the maximum level of decoration supported by default. Previously, fontification used a mode-specific default level of decoration, which is typically the minimum level of decoration supported. You can set font-long-maximum-decoration to nil to get the old behavior.
New support
Support is now provided for Java, Objective-C, AWK and SIMULA modes.
Note that Font Lock mode can be turned on without knowing exactly what modes support Font Lock mode, via the command global-font-lock-mode.
Configurable support
Support for C, C++, Objective-C and Java can be more easily configured for additional types and classes via the new variables c-font-lock-extra-types, c++-font-lock-extra-types, objc-font-lock-extra-types and, you guessed it, java-font-lock-extra-types. These value of each of these variables should be a list of regexps matching the extra type names. For example, the default value of c-font-lock-extra-types is ("\\sw+_t") which means fontification follows the convention that C type names end in _t. This results in slower fontification.
Of course, you can change the variables that specify fontification in whatever way you wish, typically by adding regexps. However, these new variables make it easier to make specific and common changes for the fontification of types.
Adding highlighting patterns to existing support
You can use the new function font-lock-add-keywords to add your own highlighting patterns, such as for project-local or user-specific contructs, for any mode.
For example, to highlight `FIXME:' words in C comments, put:
(font-lock-add-keywords 'c-mode '(("\\<FIXME:" 0 font-lock-warning-face t)))
in your ~/.emacs.
New faces
Font Lock now defines two new faces, font-lock-builtin-face and font-lock-warning-face. These are intended to highlight builtin keywords, distinct from a language's normal keywords, and objects that should be brought to user attention, respectively. Various modes now use these new faces.
Changes to fast-lock support mode
The fast-lock package, one of the two Font Lock support modes, can now process cache files silently. You can use the new variable fast-lock-verbose, in the same way as font-lock-verbose, to control this feature.
Changes to lazy-lock support mode
The lazy-lock package, one of the two Font Lock support modes, can now fontify according to the true syntactic context relative to other lines. You can use the new variable lazy-lock-defer-contextually to control this feature. If non-nil, changes to the buffer will cause subsequent lines in the buffer to be refontified after lazy-lock-defer-time seconds of idle time. If nil, then only the modified lines will be refontified; this is the same as the previous Lazy Lock mode behaviour and the behaviour of Font Lock mode.
This feature is useful in modes where strings or comments can span lines. For example, if a string or comment terminating character is deleted, then if this feature is enabled subsequent lines in the buffer will be correctly refontified to reflect their new syntactic context. Previously, only the line containing the deleted character would be refontified and you would have to use the command M-g M-g (font-lock-fontify-block) to refontify some lines.
As a consequence of this new feature, two other variables have changed:
Variable lazy-lock-defer-driven is renamed lazy-lock-defer-on-scrolling. Variable lazy-lock-defer-time can now only be a time, i.e., a number. Buffer modes for which on-the-fly deferral applies can be specified via the new variable lazy-lock-defer-on-the-fly.
If you set these variables in your ~/.emacs, then you may have to change those settings.
Ada mode changes.
There is now better support for using find-file.el with Ada mode. If you switch between spec and body, the cursor stays in the same procedure (modulo overloading). If a spec has no body file yet, but you try to switch to its body file, Ada mode now generates procedure stubs.
There are two new commands:
The user options ada-compiler-make, ada-make-options, ada-language-version, ada-compiler-syntax-check, and ada-compile-options are used within these commands.
Ada mode can now work with Outline minor mode. The outline level is calculated from the indenting, not from syntactic contructs. Outlining does not work if your code is not correctly indented.
The new function ada-gnat-style converts the buffer to the style of formatting used in GNAT. It places two blanks after a comment start, places one blank between a word end and an opening '(', and puts one space between a comma and the beginning of a word.
Scheme mode changes.
Scheme mode indentation now uses many of the facilities of Lisp mode; therefore, the variables to customize it are the variables used for Lisp mode which have names starting with lisp-. The variables with names starting with scheme- which used to do this no longer have any effect.
If you want to use different indentation for Scheme and Lisp, this is still possible, but now you must do it by adding a hook to scheme-mode-hook, which could work by setting the lisp- indentation variables as buffer-local variables.
DSSSL mode is a variant of Scheme mode, for editing DSSSL scripts. Use M-x dsssl-mode.
The emacsclient program now accepts an option --no-wait which tells it to return immediately without waiting for you to "finish" the buffer in Emacs.
M-x eldoc-mode enables a minor mode in which the echo area constantly shows the parameter list for function being called at point (in Emacs Lisp and Lisp Interaction modes only).
C-x n d now runs the new command narrow-to-defun, which narrows the accessible parts of the buffer to just the current defun.
Emacs now handles the -- argument in the standard way; all following arguments are treated as ordinary file names.
On MSDOS and Windows, the bookmark file is now called _emacs.bmk, and the saved desktop file is now called _emacs.desktop (truncated if necessary).
When you kill a buffer that visits a file, if there are any registers that save positions in the file, these register values no longer become completely useless. If you try to go to such a register with C-x j, then you are asked whether to visit the file again. If you say yes, it visits the file and then goes to the same position.
When you visit a file that changes frequently outside Emacs--for example, a log of output from a process that continues to run--it may be useful for Emacs to revert the file without querying you whenever you visit the file afresh with C-x C-f.
You can request this behavior for certain files by setting the variable revert-without-query to a list of regular expressions. If a file's name matches any of these regular expressions, find-file and revert-buffer revert the buffer without asking for permission--but only if you have not edited the buffer text yourself.
set-default-font has been renamed to set-frame-font since it applies only to the current frame.
In TeX mode, you can use the variable tex-main-file to specify the file for tex-file to run TeX on. (By default, tex-main-file is nil, and tex-file runs TeX on the current visited file.)
This is useful when you are editing a document that consists of multiple files. In each of the included files, you can set up a local variable list which specifies the top-level file of your document for tex-main-file. Then tex-file will run TeX on the whole document instead of just the file you are editing.
RefTeX mode
RefTeX mode is a new minor mode with special support for \label, \ref and \cite macros in LaTeX documents. RefTeX distinguishes labels of different environments (equation, figure, ...) and has full support for multifile documents. To use it, select a buffer with a LaTeX document and turn the mode on with M-x reftex-mode. Here are the main user commands:
Under X, RefTeX installs a Ref menu in the menu bar, with additional commands. Press ? to get help when a prompt mentions this feature. Full documentation and customization examples are in the file reftex.el. You can use the finder to view the file documentation: C-h p --> tex --> reftex.el
Changes in BibTeX mode.
Info documentation is now available.
Don't allow parentheses in string constants anymore. This confused both, the BibTeX program and Emacs BibTeX mode.
Renamed variable bibtex-mode-user-optional-fields to bibtex-user-optional-fields.
Removed variable bibtex-include-OPTannote (use bibtex-user-optional-fields instead).
New interactive functions to copy and kill fields and complete entries to the BibTeX kill ring, from where they can be yanked back by appropriate functions.
New interactive functions for repositioning and marking of entries. They are bound by default to M-C-l and M-C-h.
New hook bibtex-clean-entry-hook. It is called after entry has been cleaned.
New variable bibtex-field-delimiters, which replaces variables bibtex-field-{left|right}-delimiter.
New variable bibtex-entry-delimiters to determine how entries shall be delimited.
Allow preinitialization of fields. See documentation of bibtex-user-optional-fields, bibtex-entry-field-alist, and bibtex-include-OPTkey for details.
Book and InBook entries require either an author or an editor field. This is now supported by bibtex.el. Alternative fields are prefixed with `ALT'.
New variable bibtex-entry-format, which replaces variable bibtex-clean-entry-zap-empty-opts and allows specification of many formatting options performed on cleaning an entry (see variable documentation).
Even more control on how automatic keys are generated. See documentation of bibtex-generate-autokey for details. Transcriptions for foreign languages other than German are now handled, too.
New boolean user option bibtex-comma-after-last-field to decide if comma should be inserted at end of last field.
New boolean user option bibtex-align-at-equal-sign to determine if alignment should be made at left side of field contents or at equal signs. New user options to control entry layout (e.g. indentation).
New function bibtex-fill-entry to realign entries.
New function bibtex-reformat to reformat region or buffer.
New function bibtex-convert-alien to convert a BibTeX database from alien sources.
New function bibtex-complete-key (similar to bibtex-complete-string) to complete prefix to a key defined in buffer. Mainly useful in crossref entries.
New function bibtex-count-entries to count entries in buffer or region.
Added support for imenu.
The function bibtex-validate now checks current region instead of buffer if mark is active. Now it shows all errors of buffer in a compilation mode buffer. You can use the normal commands (e.g. next-error) for compilation modes to jump to errors.
New variable bibtex-string-file-path to determine where the files from bibtex-string-files are searched.
Iso Accents mode now supports Latin-3 as an alternative.
The function using-unix-filesystems has been replaced by the functions add-untranslated-filesystem and remove-untranslated-filesystem. Each of these functions takes the name of a drive letter or directory as an argument.
When a filesystem is added as untranslated, all files on it are read and written in binary mode (no cr/lf translation is performed).
browse-url changes
New methods for:
New commands browse-url-of-region and browse-url.
URLs marked up with <URL:...> (RFC1738) work if broken across lines. Browsing methods can be associated with URL regexps (e.g. mailto: URLs) via browse-url-browser-function.
Changes in Ediff
Clicking Mouse-2 on a brief command description in Ediff control panel pops up the Info file for this command.
There is now a variable, ediff-autostore-merges, which controls whether the result of a merge is saved in a file. By default, this is done only when merge is done from a session group (eg, when merging files in two different directories).
Since Emacs 19.31 (this hasn't been announced before), Ediff can compare and merge groups of files residing in different directories, or revisions of files in the same directory.
Since Emacs 19.31, Ediff can apply multi-file patches interactively. The patches must be in the context format or GNU unified format. (The bug related to the GNU format has now been fixed.)
Changes in Viper
The startup file is now .viper instead of .vip
All viariable/function names have been changed to start with viper- instead of vip-.
C-\ now simulates the meta-key in all Viper states.
C-z in Insert state now escapes to Vi for the duration of the next Viper command. In Vi and Insert states, C-z behaves as before.
C-c \ escapes to Vi for one command if Viper is in Insert or Emacs states.
_ is no longer the meta-key in Vi state.
The variable vip-insert-state-cursor-color can be used to change cursor color when Viper is in insert state.
If search lands the cursor near the top or the bottom of the window, Viper pulls the window up or down to expose more context. The variable vip-adjust-window-after-search controls this behavior.
Etags changes.
In C, C++, Objective C and Java, Etags tags global variables by default. The resulting tags files are inflated by 30% on average. Use --no-globals to turn this feature off. Etags can also tag variables which are members of structure-like constructs, but it does not by default. Use --members to turn this feature on.
C++ member functions are now recognized as tags.
Java is tagged like C++. In addition, "extends" and "implements" constructs are tagged. Files are recognised by the extension .java.
Etags can now handle programs written in Postscript. Files are recognised by the extensions .ps and .pdb (Postscript with C syntax). In Postscript, tags are lines that start with a slash.
Etags now handles Objective C and Objective C++ code. The usual C and C++ tags are recognized in these languages; in addition, etags recognizes special Objective C syntax for classes, class categories, methods and protocols.
Etags also handles Cobol. Files are recognised by the extension .cobol. The tagged lines are those containing a word that begins in column 8 and ends in a full stop, i.e. anything that could be a paragraph name.
Regexps in Etags now support intervals, as in ed or grep. The syntax of an interval is \{M,N\}, and it means to match the preceding expression at least M times and as many as N times.
The format for specifying a custom format for time-stamp to insert in files has changed slightly.
With the new enhancements to the functionality of format-time-string, time-stamp-format will change to be eventually compatible with it. This conversion is being done in two steps to maintain compatibility with old time-stamp-format values.
In the new scheme, alternate case is signified by the number-sign (#) modifier, rather than changing the case of the format character. This feature is as yet incompletely implemented for compatibilty reasons.
In the old time-stamp-format, all numeric fields defaulted to their natural width. (With format-time-string, each format has a fixed-width default.) In this version, you can specify the colon (:) modifier to a numeric conversion to mean "give me the historical time-stamp-format width default." Do not use colon if you are specifying an explicit width, as in %02d.
Numbers are no longer truncated to the requested width, except in the case of %02y, which continues to give a two-digit year. Digit truncation probably wasn't being used for anything else anyway.
The new formats will work with old versions of Emacs. New formats are being recommended now to allow time-stamp-format to change in the future to be compatible with format-time-string. The new forms being recommended now will continue to work then.
See the documentation string for the variable time-stamp-format for details.
There are some additional major modes:
In Shell mode, the command shell-copy-environment-variable lets you copy the value of a specified environment variable from the subshell into Emacs.
New Lisp packages include:
battery.el displays battery status for laptops.
M-x bruce (named after Lenny Bruce) is a program that might be used for adding some indecent words to your email.
M-x crisp-mode enables an emulation for the CRiSP editor.
M-x dirtrack arranges for better tracking of directory changes in shell buffers.
The new library elint.el provides for linting of Emacs Lisp code. See the documentation for elint-initialize, elint-current-buffer and elint-defun.
M-x expand-add-abbrevs defines a special kind of abbrev which is meant for programming constructs. These abbrevs expand like ordinary ones, when you type SPC, but only at the end of a line and not within strings or comments.
These abbrevs can act as templates: you can define places within an abbrev for insertion of additional text. Once you expand the abbrev, you can then use C-x a p and C-x a n to move back and forth to these insertion points. Thus you can conveniently insert additional text at these points.
filecache.el remembers the location of files so that you can visit them by short forms of their names.
find-func.el lets you find the definition of the user-loaded Emacs Lisp function at point.
M-x handwrite converts text to a "handwritten" picture.
M-x iswitch-buffer is a command for switching to a buffer, much like switch-buffer, but it reads the argument in a more helpful way.
M-x landmark implements a neural network for landmark learning.
M-x locate provides a convenient interface to the `locate' program.
M4 mode is a new mode for editing files of m4 input.
mantemp.el creates C++ manual template instantiations from the GCC error messages which indicate which instantiations are neeed.
mouse-copy.el provides a one-click copy and move feature. You can drag a region with M-mouse-1, and it is automatically inserted at point. M-Shift-mouse-1 deletes the text from its original place after inserting the copy.
mouse-drag.el lets you do scrolling by dragging Mouse-2 on the buffer.
You click the mouse and move; that distance either translates into the velocity to scroll (with mouse-drag-throw) or the distance to scroll (with mouse-drag-drag). Horizontal scrolling is enabled when needed.
Enable mouse-drag with:
(global-set-key [down-mouse-2] 'mouse-drag-throw)
-or-
(global-set-key [down-mouse-2] 'mouse-drag-drag)
mspools.el is useful for determining which mail folders have mail waiting to be read in them. It works with procmail.
Octave mode is a major mode for editing files of input for Octave. It comes with a facility for communicating with an Octave subprocess.
ogonek
The ogonek package provides functions for changing the coding of Polish diacritic characters in buffers. Codings known from various platforms are supported such as ISO8859-2, Mazovia, IBM Latin2, and TeX. For example, you can change the coding from Mazovia to ISO8859-2. Another example is a change of coding from ISO8859-2 to prefix notation (in which `/a' stands for the aogonek character, for instance) and vice versa.
To use this package load it using
M-x load-library [enter] ogonek
Then, you may get an explanation by calling one of
M-x ogonek-jak -- in Polish M-x ogonek-how -- in EnglishThe info specifies the commands and variables provided as well as the ways of customization in `.emacs'.
Interface to ph.
Emacs provides a client interface to CCSO Nameservers (ph/qi)
The CCSO nameserver is used in more than 300 organisations around the world (mostly universities) to provide directory services about people. ph.el provides a convenient Emacs interface to these servers.
uce.el is useful for replying to unsolicited commercial email.
vcursor.el implements a "virtual cursor" feature. You can move the virtual cursor with special commands while the real cursor does not move.
webjump.el is a "hot list" package which you can set up for visiting your favorite web sites.
M-x winner-mode is a minor mode which saves window configurations, so you can move back to other configurations that you have recently used.
M-x word-help uses Info to display the description of the word at the cursor.
movemail change
Movemail no longer needs to be installed setuid root in order for POP mail retrieval to function properly. This is because it no longer supports the RPOP (reserved-port POP) protocol; instead, it uses the user's POP password to authenticate to the mail server.
This change was made earlier, but not reported in NEWS before
Please send FSF & GNU inquiries & questions to gnu@gnu.org. There are also other ways to contact the FSF.
Please send comments on these web pages to webmasters@www.gnu.org, send other questions to gnu@gnu.org.
Copyright (C) 1998, 2006 Free Software Foundation, Inc., 51 Franklin Street,Fifth Floor, Boston, MA 02110-1301, USA
Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved.