emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] /srv/bzr/emacs/trunk r110863: Merge from emacs-24; up to r


From: Glenn Morris
Subject: [Emacs-diffs] /srv/bzr/emacs/trunk r110863: Merge from emacs-24; up to r110832
Date: Sat, 10 Nov 2012 15:13:33 -0800
User-agent: Bazaar (2.5.0)

------------------------------------------------------------
revno: 110863 [merge]
committer: Glenn Morris <address@hidden>
branch nick: trunk
timestamp: Sat 2012-11-10 15:13:33 -0800
message:
  Merge from emacs-24; up to r110832
modified:
  doc/emacs/ChangeLog
  doc/emacs/ack.texi
  doc/emacs/buffers.texi
  doc/emacs/dired.texi
  doc/emacs/display.texi
  doc/emacs/emacs.texi
  doc/emacs/files.texi
  doc/emacs/mini.texi
  doc/emacs/misc.texi
  doc/emacs/trouble.texi
  doc/lispref/ChangeLog
  doc/lispref/edebug.texi
  doc/lispref/elisp.texi
  doc/lispref/frames.texi
  doc/lispref/lists.texi
  doc/lispref/searching.texi
  doc/lispref/variables.texi
  doc/lispref/windows.texi
  doc/misc/ChangeLog
  doc/misc/cl.texi
  doc/misc/url.texi
  etc/ERC-NEWS
  etc/GNUS-NEWS
  etc/NEWS
  lisp/ChangeLog
  lisp/emacs-lisp/advice.el
  lisp/emacs-lisp/cl-extra.el
  lisp/emacs-lisp/cl-lib.el
  lisp/emacs-lisp/cl-macs.el
  lisp/emacs-lisp/cl.el
  lisp/emacs-lisp/gv.el
  lisp/mail/emacsbug.el
  lisp/minibuf-eldef.el
  lisp/server.el
  lisp/term.el
  lisp/vc/diff-mode.el
  lisp/woman.el
  src/ChangeLog
  src/ralloc.c
  src/window.c
  src/xdisp.c
=== modified file 'doc/emacs/ChangeLog'
--- a/doc/emacs/ChangeLog       2012-10-30 12:48:42 +0000
+++ b/doc/emacs/ChangeLog       2012-11-10 23:13:33 +0000
@@ -1,3 +1,46 @@
+2012-11-10  Glenn Morris  <address@hidden>
+
+       * misc.texi (Terminal emulator): Rename `term-face' to `term'.
+
+       * emacs.texi (Acknowledgments): Add profiler author.
+       * ack.texi (Acknowledgments): Add some recent contributions.
+
+2012-11-10  Chong Yidong  <address@hidden>
+
+       * files.texi (Diff Mode): Doc fixes for
+       diff-delete-trailing-whitespace (Bug#12831).
+
+       * trouble.texi (Crashing): Copyedits.
+
+2012-11-10  Glenn Morris  <address@hidden>
+
+       * files.texi (Diff Mode): Trailing whitespace updates.
+
+2012-11-10  Chong Yidong  <address@hidden>
+
+       * misc.texi (Terminal emulator): Document Term mode faces.
+
+       * mini.texi (Basic Minibuffer): New node.  Document
+       minibuffer-electric-default-mode.
+
+       * display.texi (Visual Line Mode): Fix index entry.
+
+       * buffers.texi (Several Buffers): List Buffer Menu command anmes,
+       and index the keybindings.  Document tabulated-list-sort.
+       (Kill Buffer): Capitalize Buffer Menu.
+
+       * trouble.texi (Memory Full): Capitalize Buffer Menu.
+
+2012-11-10  Eli Zaretskii  <address@hidden>
+
+       * display.texi (Auto Scrolling): Clarify that scroll-step is
+       ignored when scroll-conservatively is set to a non-zero value.
+       (Bug#12801)
+
+2012-11-10  Chong Yidong  <address@hidden>
+
+       * dired.texi (Dired Updating): Doc fix (Bug#11744).
+
 2012-10-30  Michael Albinus  <address@hidden>
 
        * trouble.texi (Known Problems): Mention command `debbugs-gnu-usertags'.

=== modified file 'doc/emacs/ack.texi'
--- a/doc/emacs/ack.texi        2012-10-28 00:16:55 +0000
+++ b/doc/emacs/ack.texi        2012-11-09 08:03:58 +0000
@@ -244,8 +244,9 @@
 
 @item
 Julien Danjou wrote an implementation of ``Desktop Notifications''
-(@file{notifications.el}); and @file{color.el}, a library for general
-color manipulation.  He also made various contributions to Gnus.
+(@file{notifications.el}, and related packages for ERC and Gnus);
+and @file{color.el}, a library for general color manipulation.
+He also made various contributions to Gnus.
 
 @item
 Vivek Dasmohapatra wrote @file{htmlfontify.el}, to convert a buffer or
@@ -790,6 +791,9 @@
 Yukihiro Matsumoto and Nobuyoshi Nakada wrote Ruby-mode.
 
 @item
+Tomohiro Matsuyama wrote the native Elisp profiler.
+
address@hidden
 Thomas May wrote @file{blackbox.el}, a version of the traditional
 blackbox game.
 

=== modified file 'doc/emacs/buffers.texi'
--- a/doc/emacs/buffers.texi    2012-09-23 10:46:50 +0000
+++ b/doc/emacs/buffers.texi    2012-11-07 06:54:43 +0000
@@ -309,7 +309,7 @@
 To kill internal buffers as well, call @code{kill-matching-buffers}
 with a prefix argument.
 
-  The buffer menu feature is also convenient for killing various
+  The Buffer Menu feature is also convenient for killing various
 buffers.  @xref{Several Buffers}.
 
 @vindex kill-buffer-hook
@@ -339,7 +339,7 @@
 
 @node Several Buffers
 @section Operating on Several Buffers
address@hidden buffer menu
address@hidden Buffer Menu
 
 @table @kbd
 @item M-x buffer-menu
@@ -348,7 +348,7 @@
 Similar, but do it in another window.
 @end table
 
-  The @dfn{buffer menu} opened by @kbd{C-x C-b} (@pxref{List Buffers})
+  The @dfn{Buffer Menu} opened by @kbd{C-x C-b} (@pxref{List Buffers})
 does not merely list buffers.  It also allows you to perform various
 operations on buffers, through an interface similar to Dired
 (@pxref{Dired}).  You can save buffers, kill them (here called
@@ -356,106 +356,169 @@
 
 @findex buffer-menu
 @findex buffer-menu-other-window
-  To use the buffer menu, type @kbd{C-x C-b} and switch to the window
+  To use the Buffer Menu, type @kbd{C-x C-b} and switch to the window
 displaying the @file{*Buffer List*} buffer.  You can also type
address@hidden buffer-menu} to open the buffer menu in the selected window.
address@hidden buffer-menu} to open the Buffer Menu in the selected window.
 Alternatively, the command @kbd{M-x buffer-menu-other-window} opens
-the buffer menu in another window, and selects that window.
+the Buffer Menu in another window, and selects that window.
 
-  The buffer menu is a read-only buffer, and can be changed only
+  The Buffer Menu is a read-only buffer, and can be changed only
 through the special commands described in this section.  The usual
-cursor motion commands can be used in this buffer.  The
-following commands apply to the buffer described on the current line:
+cursor motion commands can be used in this buffer.  The following
+commands apply to the buffer described on the current line:
 
 @table @kbd
 @item d
-Request to delete (kill) the buffer, then move down.  The request
-shows as a @samp{D} on the line, before the buffer name.  Requested
-deletions take place when you type the @kbd{x} command.
address@hidden Buffer-menu-delete
address@hidden d @r{(Buffer Menu)}
+Flag the buffer for deletion (killing), then move point to the next
+line (@code{Buffer-menu-delete}).  The deletion flag is indicated by
+the character @samp{D} on the line, before the buffer name.  The
+deletion occurs only when you type the @kbd{x} command (see below).
+
 @item C-d
-Like @kbd{d} but move up afterwards instead of down.
address@hidden Buffer-menu-delete-backwards
address@hidden C-d @r{(Buffer Menu)}
+Like @kbd{d}, but move point up instead of down
+(@code{Buffer-menu-delete-backwards}).
+
 @item s
-Request to save the buffer.  The request shows as an @samp{S} on the
-line.  Requested saves take place when you type the @kbd{x} command.
-You may request both saving and deletion for the same buffer.
address@hidden Buffer-menu-save
address@hidden s @r{(Buffer Menu)}
+Flag the buffer for saving (@code{Buffer-menu-save}).  The save flag
+is indicated by the character @samp{S} on the line, before the buffer
+name.  The saving occurs only when you type @kbd{x}.  You may request
+both saving and deletion for the same buffer.
+
 @item x
-Perform previously requested deletions and saves.
address@hidden Buffer-menu-execute
address@hidden x @r{(Buffer Menu)}
+Perform all flagged deletions and saves (@code{Buffer-menu-execute}).
+
 @item u
-Remove any request made for the current line, and move down.
address@hidden Buffer-menu-unmark
address@hidden u @r{(Buffer Menu)}
+Remove all flags from the current line, and move down
+(@code{Buffer-menu-unmark}).
+
 @item @key{DEL}
-Move to previous line and remove any request made for that line.
address@hidden Buffer-menu-backup-unmark
address@hidden DEL @r{(Buffer Menu)}
+Move to the previous line and remove all flags on that line
+(@code{Buffer-menu-backup-unmark}).
 @end table
 
-  The @kbd{d}, @kbd{C-d}, @kbd{s} and @kbd{u} commands to add or remove
-flags also move down (or up) one line.  They accept a numeric argument
-as a repeat count.
address@hidden
+The commands for adding or removing flags, @kbd{d}, @kbd{C-d}, @kbd{s}
+and @kbd{u}, all accept a numeric argument as a repeat count.
 
-  These commands operate immediately on the buffer listed on the current
-line:
+  The following commands operate immediately on the buffer listed on
+the current line.  They also accept a numeric argument as a repeat
+count.
 
 @table @kbd
 @item ~
-Mark the buffer ``unmodified''.  The command @kbd{~} does this
-immediately when you type it.
address@hidden Buffer-menu-not-modified
address@hidden ~ @r{(Buffer Menu)}
+Mark the buffer as unmodified (@code{Buffer-menu-not-modified}).
address@hidden Commands}.
+
 @item %
-Toggle the buffer's read-only flag.  The command @kbd{%} does
-this immediately when you type it.
address@hidden Buffer-menu-toggle-read-only
address@hidden % @r{(Buffer Menu)}
+Toggle the buffer's read-only status
+(@code{Buffer-menu-toggle-read-only}).  @xref{Misc Buffer}.
+
 @item t
-Visit the buffer as a tags table.  @xref{Select Tags Table}.
address@hidden Buffer-menu-visit-tags-table
address@hidden % @r{(Buffer Menu)}
+Visit the buffer as a tags table
+(@code{Buffer-menu-visit-tags-table}).  @xref{Select Tags Table}.
 @end table
 
-  There are also commands to select another buffer or buffers:
+  The following commands are used to select another buffer or buffers:
 
 @table @kbd
 @item q
-Quit the buffer menu---immediately display the most recent formerly
-visible buffer in its place.
address@hidden quit-window
address@hidden q @r{(Buffer Menu)}
+Quit the Buffer Menu (@code{quit-window}).  The most recent formerly
+visible buffer is displayed in its place.
+
 @item @key{RET}
 @itemx f
-Immediately select this line's buffer in place of the @file{*Buffer
-List*} buffer.
address@hidden Buffer-menu-this-window
address@hidden f @r{(Buffer Menu)}
address@hidden RET @r{(Buffer Menu)}
+Select this line's buffer, replacing the @file{*Buffer List*} buffer
+in its window (@code{Buffer-menu-this-window}).
+
 @item o
-Immediately select this line's buffer in another window as if by
address@hidden 4 b}, leaving @file{*Buffer List*} visible.
address@hidden Buffer-menu-other-window
address@hidden o @r{(Buffer Menu)}
+Select this line's buffer in another window, as if by @kbd{C-x 4 b},
+leaving @file{*Buffer List*} visible
+(@code{Buffer-menu-other-window}).
+
 @item C-o
-Immediately display this line's buffer in another window, but don't
-select the window.
address@hidden Buffer-menu-switch-other-window
address@hidden C-o @r{(Buffer Menu)}
+Display this line's buffer in another window, without selecting it
+(@code{Buffer-menu-switch-other-window}).
+
 @item 1
-Immediately select this line's buffer in a full-screen window.
address@hidden Buffer-menu-1-window
address@hidden 1 @r{(Buffer Menu)}
+Select this line's buffer in a full-frame window
+(@code{Buffer-menu-1-window}).
+
 @item 2
-Immediately set up two windows, with this line's buffer selected in
-one, and the previously current buffer (aside from the buffer
address@hidden List*}) displayed in the other.
address@hidden Buffer-menu-2-window
address@hidden 2 @r{(Buffer Menu)}
+Set up two windows on the current frame, with this line's buffer
+selected in one, and a previously current buffer (aside from
address@hidden List*}) in the other (@code{Buffer-menu-2-window}).
+
 @item b
-Bury the buffer listed on this line.
address@hidden Buffer-menu-bury
address@hidden b @r{(Buffer Menu)}
+Bury this line's buffer (@code{Buffer-menu-bury}).
+
 @item m
address@hidden Buffer-menu-mark
address@hidden m @r{(Buffer Menu)}
 Mark this line's buffer to be displayed in another window if you exit
-with the @kbd{v} command.  The request shows as a @samp{>} at the
-beginning of the line.  (A single buffer may not have both a delete
-request and a display request.)
+with the @kbd{v} command (@code{Buffer-menu-mark}).  The display flag
+is indicated by the character @samp{>} at the beginning of the line.
+(A single buffer may not have both deletion and display flags.)
+
 @item v
-Immediately select this line's buffer, and also display in other windows
-any buffers previously marked with the @kbd{m} command.  If you have not
-marked any buffers, this command is equivalent to @kbd{1}.
address@hidden Buffer-menu-select
address@hidden v @r{(Buffer Menu)}
+Select this line's buffer, and also display in other windows any
+buffers flagged with the @kbd{m} command (@code{Buffer-menu-select}).
+If you have not flagged any buffers, this command is equivalent to
address@hidden
 @end table
 
-  There is also a command that affects the entire buffer list:
+  The following commands affect the entire buffer list:
 
 @table @kbd
address@hidden S
address@hidden tabulated-list-sort
address@hidden S @r{(Buffer Menu)}
+Sort the Buffer Menu entries according to their values in the column
+at point.  With a numeric prefix argument @var{n}, sort according to
+the @var{n}-th column (@code{tabulated-list-sort}).
+
 @item T
-Delete, or reinsert, lines for non-file buffers.  This command toggles
-the inclusion of such buffers in the buffer list.
address@hidden Buffer-menu-toggle-files-only
address@hidden T @r{(Buffer Menu)}
+Delete, or reinsert, lines for non-file buffers
address@hidden).  This command toggles the
+inclusion of such buffers in the buffer list.
 @end table
 
-  What @code{buffer-menu} actually does is create and switch to a
-suitable buffer, and turn on Buffer Menu mode in it.  Everything else
-described above is implemented by the special commands provided in
-Buffer Menu mode.  One consequence of this is that you can switch from
-the @file{*Buffer List*} buffer to another Emacs buffer, and edit
-there.  You can reselect the @file{*Buffer List*} buffer later, to
-perform the operations already requested, or you can kill it, or pay
-no further attention to it.
-
   Normally, the buffer @file{*Buffer List*} is not updated
 automatically when buffers are created and killed; its contents are
 just text.  If you have created, deleted or renamed buffers, the way
@@ -633,7 +696,6 @@
 @findex msb-mode
 @cindex mode, MSB
 @cindex MSB mode
address@hidden buffer menu
 @findex mouse-buffer-menu
 @kindex C-Down-Mouse-1
   MSB global minor mode (``MSB'' stands for ``mouse select buffer'')

=== modified file 'doc/emacs/dired.texi'
--- a/doc/emacs/dired.texi      2012-10-29 23:48:02 +0000
+++ b/doc/emacs/dired.texi      2012-11-05 14:13:26 +0000
@@ -1170,17 +1170,17 @@
 
 @kindex k @r{(Dired)}
 @findex dired-do-kill-lines
-  To delete the specified @emph{file lines} from the buffer---not
-delete the files---type @kbd{k} (@code{dired-do-kill-lines}).  Like
+  To delete @emph{file lines} from the buffer---without actually
+deleting the files---type @kbd{k} (@code{dired-do-kill-lines}).  Like
 the file-operating commands, this command operates on the next @var{n}
-files, or on the marked files if any; but it does not operate on the
-current file as a last resort.
+files, or on the marked files if any.  However, it does not operate on
+the current file, since otherwise mistyping @kbd{k} could be annoying.
 
-  If you use @kbd{k} with a numeric prefix argument to kill the line
-for a file that is a directory, which you have inserted in the Dired
-buffer as a subdirectory, it removed that subdirectory line from the
-buffer as well.  Typing @kbd{C-u k} on the header line for a
-subdirectory also removes the subdirectory line from the Dired buffer.
+  If you use @kbd{k} to kill the line for a directory file which you
+had inserted in the Dired buffer as a subdirectory
+(@pxref{Subdirectories in Dired}), it removes the subdirectory listing
+as well.  Typing @kbd{C-u k} on the header line for a subdirectory
+also removes the subdirectory line from the Dired buffer.
 
   The @kbd{g} command brings back any individual lines that you have
 killed in this way, but not subdirectories---you must use @kbd{i} to

=== modified file 'doc/emacs/display.texi'
--- a/doc/emacs/display.texi    2012-10-05 05:57:24 +0000
+++ b/doc/emacs/display.texi    2012-11-07 20:43:38 +0000
@@ -221,20 +221,27 @@
 if you set @code{scroll-conservatively} to a small number @var{n},
 then if you move point just a little off the screen (less than @var{n}
 lines), Emacs scrolls the text just far enough to bring point back on
-screen.  By default, @code{scroll-conservatively} address@hidden  If you
-set @code{scroll-conservatively} to a large number (larger than 100),
-Emacs will never center point as result of scrolling, even if point
-moves far away from the text previously displayed in the window.  With
-such a large value, Emacs will always scroll text just enough for
+screen.  If doing so fails to make point visible, Emacs centers point
+in the window.  By default, @code{scroll-conservatively} address@hidden
+If you set @code{scroll-conservatively} to a large number (larger than
+100), Emacs will never center point as result of scrolling, even if
+point moves far away from the text previously displayed in the window.
+With such a large value, Emacs will always scroll text just enough for
 bringing point into view, so point will end up at the top or bottom of
 the window, depending on the scroll direction.
 
 @vindex scroll-step
-  The variable @code{scroll-step} determines how many lines to scroll
-the window when point moves off the screen.  If moving by that number
-of lines fails to bring point back into view, point is centered
-instead.  The default value is zero, which causes point to always be
-centered after scrolling.
+  An alternative way of controlling how Emacs scrolls text is by
+customizing the variable @code{scroll-step}.  Its value determines how
+many lines to scroll the window when point moves off the screen.  If
+moving by that number of lines fails to bring point back into view,
+point is centered instead.  The default value is zero, which causes
+point to always be centered after scrolling.
+
+  Since both @code{scroll-conservatively} and @code{scroll-step}
+control automatic scrolling in contradicting ways, you should set only
+one of them.  If you customize both, the value of
address@hidden takes precedence.
 
 @cindex aggressive scrolling
 @vindex scroll-up-aggressively
@@ -1493,6 +1500,7 @@
 edge.  This makes the text easier to read, as wrapping does not occur
 in the middle of words.
 
address@hidden mode, Visual Line
 @cindex Visual Line mode
 @findex visual-line-mode
 @findex global-visual-line-mode

=== modified file 'doc/emacs/emacs.texi'
--- a/doc/emacs/emacs.texi      2012-10-27 05:03:52 +0000
+++ b/doc/emacs/emacs.texi      2012-11-09 08:03:58 +0000
@@ -261,6 +261,7 @@
 
 The Minibuffer
 
+* Basic Minibuffer::      Basic usage of the minibuffer.
 * Minibuffer File::     Entering file names with the minibuffer.
 * Minibuffer Edit::     How to edit in the minibuffer.
 * Completion::          An abbreviation facility for minibuffer input.
@@ -1402,7 +1403,7 @@
 L?decke, Greg McGary, Roland McGrath, Michael McNamara, Alan Mackenzie,
 Christopher J.@: Madsen, Neil M.@: Mager, Ken Manheimer, Bill Mann,
 Brian Marick, Simon Marshall, Bengt Martensson, Charlie Martin,
-Yukihiro Matsumoto, David Maus, Thomas May, Will Mengarini, David
+Yukihiro Matsumoto, Tomohiro Matsuyama, David Maus, Thomas May, Will 
Mengarini, David
 Megginson, Stefan Merten, Ben A.@: Mesander, Wayne Mesard, Brad
 Miller, Lawrence Mitchell, Richard Mlynarik, Gerd Moellmann, Stefan
 Monnier, Keith Moore, Jan Moringen, Morioka Tomohiko, Glenn Morris,

=== modified file 'doc/emacs/files.texi'
--- a/doc/emacs/files.texi      2012-10-27 05:03:52 +0000
+++ b/doc/emacs/files.texi      2012-11-08 17:31:53 +0000
@@ -1341,7 +1341,7 @@
   You can edit a Diff mode buffer like any other buffer.  (If it is
 read-only, you need to make it writable first.  @xref{Misc Buffer}.)
 Whenever you change a hunk, Diff mode attempts to automatically
-correct the line numbers in the hunk headers, to ensure that the diff
+correct the line numbers in the hunk headers, to ensure that the patch
 remains ``correct''.  To disable automatic line number correction,
 change the variable @code{diff-update-on-the-fly} to @code{nil}.
 
@@ -1470,11 +1470,22 @@
 functions that are deleted by the patch.
 @end table
 
-  By default, Diff mode highlights trailing whitespace on modified
-lines, so that they are more obvious.  This is done by enabling
-Whitespace mode in the Diff buffer (@pxref{Useless Whitespace}).  Diff
-mode buffers are set up so that Whitespace mode avoids highlighting
-trailing whitespace occurring in the diff context.
address@hidden Trailing whitespace is NOT shown by default.
address@hidden Emacs's dir-locals file enables this (for some reason).
address@hidden trailing whitespace, in patches
address@hidden diff-delete-trailing-whitespace
+  Patches sometimes include trailing whitespace on modified lines, as
+an unintentional and undesired change.  There are two ways to deal
+with this problem.  Firstly, if you enable Whitespace mode in a Diff
+buffer (@pxref{Useless Whitespace}), it automatically highlights
+trailing whitespace in modified lines.  Secondly, you can use the
+command @kbd{M-x diff-delete-trailing-whitespace}, which searches for
+trailing whitespace in the lines modified by the patch, and removes
+that whitespace in both the patch and the patched source file(s).
+This command does not save the modifications that it makes, so you can
+decide whether to save the changes (the list of modified files is
+displayed in the echo area).  With a prefix argument, it tries to
+modify the original source files rather than the patched source files.
 
 @node Misc File Ops
 @section Miscellaneous File Operations

=== modified file 'doc/emacs/mini.texi'
--- a/doc/emacs/mini.texi       2012-10-18 03:27:17 +0000
+++ b/doc/emacs/mini.texi       2012-11-07 20:43:38 +0000
@@ -13,24 +13,54 @@
 use the usual Emacs editing commands in the minibuffer to edit the
 argument text.
 
address@hidden
+* Basic Minibuffer::      Basic usage of the minibuffer.
+* Minibuffer File::       Entering file names with the minibuffer.
+* Minibuffer Edit::       How to edit in the minibuffer.
+* Completion::            An abbreviation facility for minibuffer input.
+* Minibuffer History::    Reusing recent minibuffer arguments.
+* Repetition::            Re-executing commands that used the minibuffer.
+* Passwords::             Entering passwords in the echo area.
+* Yes or No Prompts::     Replying yes or no in the echo area.
address@hidden menu
+
address@hidden Basic Minibuffer
address@hidden Using the Minibuffer
+
 @cindex prompt
   When the minibuffer is in use, it appears in the echo area, with a
-cursor.  The minibuffer starts with a @dfn{prompt} in a distinct
-color, usually ending with a colon.  The prompt states what kind of
-input is expected, and how it will be used.
+cursor.  The minibuffer starts with a @dfn{prompt}, usually ending
+with a colon.  The prompt states what kind of input is expected, and
+how it will be used.  The prompt is highlighted using the
address@hidden face (@pxref{Faces}).
 
   The simplest way to enter a minibuffer argument is to type the text,
-then @key{RET} to submit the argument and exit the minibuffer.  You
-can cancel the minibuffer, and the command that wants the argument, by
-typing @kbd{C-g}.
+then @key{RET} to submit the argument and exit the minibuffer.
+Alternatively, you can type @kbd{C-g} to exit the minibuffer by
+cancelling the command asking for the argument (@pxref{Quitting}).
 
 @cindex default argument
-  Sometimes, a @dfn{default argument} appears in the prompt, inside
+  Sometimes, the prompt shows a @dfn{default argument}, inside
 parentheses before the colon.  This default will be used as the
 argument if you just type @key{RET}.  For example, commands that read
 buffer names usually show a buffer name as the default; you can type
 @key{RET} to operate on that default buffer.
 
address@hidden Minibuffer Electric Default mode
address@hidden mode, Minibuffer Electric Default
address@hidden minibuffer-electric-default-mode
address@hidden minibuffer-eldef-shorten-default
+  If you enable Minibuffer Electric Default mode, a global minor mode,
+Emacs hides the default argument as soon as you modify the contents of
+the minibuffer (since typing @key{RET} would no longer submit that
+default).  If you ever bring back the original minibuffer text, the
+prompt again shows the default.  Furthermore, if you change the
+variable @code{minibuffer-eldef-shorten-default} to a address@hidden
+value, the default argument is displayed as @address@hidden
+instead of @samp{(default @var{default})}, saving some screen space.
+To enable this minor mode, type @kbd{M-x
+minibuffer-electric-default-mode}.
+
   Since the minibuffer appears in the echo area, it can conflict with
 other uses of the echo area.  If an error message or an informative
 message is emitted while the minibuffer is active, the message hides
@@ -38,16 +68,6 @@
 the minibuffer comes back.  While the minibuffer is in use, keystrokes
 do not echo.
 
address@hidden
-* Minibuffer File::       Entering file names with the minibuffer.
-* Minibuffer Edit::       How to edit in the minibuffer.
-* Completion::            An abbreviation facility for minibuffer input.
-* Minibuffer History::    Reusing recent minibuffer arguments.
-* Repetition::            Re-executing commands that used the minibuffer.
-* Passwords::             Entering passwords in the echo area.
-* Yes or No Prompts::     Replying yes or no in the echo area.
address@hidden menu
-
 @node Minibuffer File
 @section Minibuffers for File Names
 

=== modified file 'doc/emacs/misc.texi'
--- a/doc/emacs/misc.texi       2012-09-30 09:18:38 +0000
+++ b/doc/emacs/misc.texi       2012-11-10 01:40:48 +0000
@@ -1186,30 +1186,39 @@
 @subsection Emacs Terminal Emulator
 @findex term
 
-  To run a subshell in a terminal emulator, use @kbd{M-x term}.  This
-creates (or reuses) a buffer named @file{*terminal*}, and runs a
+  To run a subshell in a text terminal emulator, use @kbd{M-x term}.
+This creates (or reuses) a buffer named @file{*terminal*}, and runs a
 subshell with input coming from your keyboard, and output going to
 that buffer.
 
address@hidden line mode @r{(terminal emulator)}
address@hidden char mode @r{(terminal emulator)}
   The terminal emulator uses Term mode, which has two input modes.  In
-line mode, Term basically acts like Shell mode (@pxref{Shell Mode}).
-
-  In char mode, each character is sent directly to the subshell, as
-``terminal input''.  Any ``echoing'' of your input is the
-responsibility of the subshell.  The sole exception is the terminal
-escape character, which by default is @kbd{C-c} (@pxref{Term Mode}).
-Any ``terminal output'' from the subshell goes into the buffer,
-advancing point.
address@hidden mode}, Term basically acts like Shell mode (@pxref{Shell
+Mode}).  In @dfn{char mode}, each character is sent directly to the
+subshell, as terminal input; the sole exception is the terminal escape
+character, which by default is @kbd{C-c} (@pxref{Term Mode}).  Any
+echoing of your input is the responsibility of the subshell; any
+terminal output from the subshell goes into the buffer, advancing
+point.
 
   Some programs (such as Emacs itself) need to control the appearance
-on the terminal screen in detail.  They do this by sending special
-control codes.  The exact control codes needed vary from terminal to
-terminal, but nowadays most terminals and terminal emulators
-(including @code{xterm}) understand the ANSI-standard (VT100-style)
-escape sequences.  Term mode recognizes these escape sequences, and
-handles each one appropriately, changing the buffer so that the
-appearance of the window matches what it would be on a real terminal.
-You can actually run Emacs inside an Emacs Term window.
+of the terminal screen in detail.  They do this by emitting special
+control codes.  Term mode recognizes and handles ANSI-standard
+VT100-style escape sequences, which are accepted by most modern
+terminals, including @command{xterm}.  (Hence, you can actually run
+Emacs inside an Emacs Term window.)
+
+  The @code{term} face specifies the default appearance of text
+in the terminal emulator (the default is the same appearance as the
address@hidden face).  When terminal control codes are used to change
+the appearance of text, these are represented in the terminal emulator
+by the faces @code{term-color-black}, @code{term-color-red},
address@hidden, @code{term-color-yellow}
address@hidden, @code{term-color-magenta},
address@hidden, @code{term-color-white},
address@hidden, and @code{term-color-bold}.
address@hidden
 
   You can also Term mode to communicate with a device connected to a
 serial port.  @xref{Serial Terminal}.
@@ -1224,6 +1233,9 @@
 directory is.  This is done automatically by @code{bash} version 1.15
 and later.
 
+
+
+
 @node Term Mode
 @subsection Term Mode
 @cindex Term mode

=== modified file 'doc/emacs/trouble.texi'
--- a/doc/emacs/trouble.texi    2012-10-30 12:48:42 +0000
+++ b/doc/emacs/trouble.texi    2012-11-08 10:35:40 +0000
@@ -275,24 +275,25 @@
 editing in the same Emacs session.
 
   Do not use @kbd{M-x buffer-menu} to save or kill buffers when you run
-out of memory, because the buffer menu needs a fair amount of memory
+out of memory, because the Buffer Menu needs a fair amount of memory
 itself, and the reserve supply may not be enough.
 
 @node Crashing
 @subsection When Emacs Crashes
 
-  Emacs is not supposed to crash, but if it does, before it exits it
-reports a brief summary  of the crash to the standard error stream
address@hidden  If enabled, a crashed Emacs also generates a core dump
-containing voluminous data about the crash.  On many platforms you can
-enable core dumps by putting the shell command @samp{ulimit -c unlimited}
-into your shell startup script.  The crash report and core dump can be
-used when debugging the same version of Emacs on the same platform.
address@hidden crash report
+  Emacs is not supposed to crash, but if it does, it produces a
address@hidden report} prior to exiting.  The crash report is printed to
+the standard error stream.  If Emacs was started from a graphical
+desktop, the standard error stream is commonly redirected to a file
+such as @file{~/.xsession-errors}, so you can look for the crash
+report there.
 
-The format of the crash report depends on the platform, and some
-platforms support backtraces.
-Here is an example, generated on x86-64 GNU/Linux with version 2.15 of
-the GNU C Library:
+  The format of the crash report depends on the platform.  On some
+platforms, such as those using the GNU C Library, the crash report
+includes a @dfn{backtrace} describing the execution state prior to
+crashing, which can be used to help debug the crash.  Here is an
+example:
 
 @example
 Fatal error 11: Segmentation fault
@@ -304,25 +305,18 @@
 /lib64/libpthread.so.0(read+0xe)[0x375220e08e]
 emacs[0x509af6]
 emacs[0x5acc26]
-emacs[0x5adbfb]
-emacs[0x56566b]
-emacs[0x59bac3]
-emacs[0x565151]
-...
address@hidden
 @end example
 
 @noindent
-The number @samp{11} is the system signal number that corresponds to
-the problem, a segmentation fault here.  The three dots at the end
-indicate that Emacs suppressed further backtrace entries, in the
-interest of brevity.
-
-The hexadecimal program addresses can be useful in debugging sessions.
-For example, the GDB command @samp{list *0x509af6} prints the
-source-code lines corresponding to the @samp{emacs[0x509af6]} entry in
-the backtrace.  Or, if your system has @command{addr2line}, the
-following shell command outputs a backtrace with source-code line
-numbers:
+The number @samp{11} is the system signal number corresponding to the
+crash---in this case a segmentation fault.  The hexadecimal numbers
+are program addresses, which can be associated with source code lines
+using a debugging tool.  For example, the GDB command
address@hidden *0x509af6} prints the source-code lines corresponding to
+the @samp{emacs[0x509af6]} entry.  If your system has the
address@hidden utility, the following shell command outputs a
+backtrace with source-code line numbers:
 
 @example
 sed -n 's/.*\[\(.*\)]$/\1/p' @var{backtrace} |
@@ -334,6 +328,15 @@
 the backtrace, and @var{bindir} is the name of the directory that
 contains the Emacs executable.
 
address@hidden core dump
+  Optionally, Emacs can generate a @dfn{core dump} when it crashes.  A
+core dump is a file containing voluminous data about the state of the
+program prior to the crash, usually examined by loading it into a
+debugger such as GDB.  On many platforms, core dumps are disabled by
+default, and you must explicitly enable them by running the shell
+command @samp{ulimit -c unlimited} (e.g.@: in your shell startup
+script).
+
 @node After a Crash
 @subsection Recovery After a Crash
 

=== modified file 'doc/lispref/ChangeLog'
--- a/doc/lispref/ChangeLog     2012-11-08 07:50:43 +0000
+++ b/doc/lispref/ChangeLog     2012-11-10 23:13:33 +0000
@@ -1,3 +1,39 @@
+2012-11-10  Martin Rudalics  <address@hidden>
+
+       * elisp.texi (Top): Add Recombining Windows to menu.
+       * windows.texi (Recombining Windows): New subsection.
+       (Splitting Windows): Rewrite text on handling of window
+       combinations and move it to new subsection.
+
+2012-11-10  Chong Yidong  <address@hidden>
+
+       * searching.texi (Replacing Match): Document \? in replace-match.
+
+       * variables.texi (Creating Buffer-Local): Document setq-local and
+       defvar-local.
+       (Setting Generalized Variables): Arrange table alphabetically.
+
+       * lists.texi (List Elements, List Variables): Clarify descriptions
+       of push and pop for generalized variables.
+
+       * edebug.texi (Specification List): setf is no longer CL-only.
+
+2012-11-10  Glenn Morris  <address@hidden>
+
+       * variables.texi (Adding Generalized Variables):
+       Update description of FIX-RETURN expansion.
+
+       * variables.texi (Setting Generalized Variables):
+       Split most of previous contents into this subsection.
+       (Adding Generalized Variables): New subsection.
+       Move note on lack of setf functions here from misc/cl.texi.
+
+       * elisp.texi: Add Generalized Variables subsections to detailed menu.
+
+2012-11-10  Chong Yidong  <address@hidden>
+
+       * frames.texi (Initial Parameters): Doc fix (Bug#12144).
+
 2012-11-08  Michael Albinus  <address@hidden>
 
        * os.texi (Notifications): Update descriptions of

=== modified file 'doc/lispref/edebug.texi'
--- a/doc/lispref/edebug.texi   2012-09-22 13:24:58 +0000
+++ b/doc/lispref/edebug.texi   2012-11-07 05:22:10 +0000
@@ -1211,9 +1211,7 @@
 A single evaluated expression, which is instrumented.
 
 @item place
address@hidden I can't see that this index entry is useful without any 
explanation.
address@hidden @findex edebug-unwrap
-A place to store a value, as in the Common Lisp @code{setf} construct.
+A generalized variable.  @xref{Generalized Variables}.
 
 @item body
 Short for @code{&rest form}.  See @code{&rest} below.

=== modified file 'doc/lispref/elisp.texi'
--- a/doc/lispref/elisp.texi    2012-10-27 22:42:07 +0000
+++ b/doc/lispref/elisp.texi    2012-11-07 09:41:52 +0000
@@ -502,6 +502,11 @@
 * Default Value::           The default value is seen in buffers
                               that don't have their own buffer-local values.
 
+Generalized Variables
+
+* Setting Generalized Variables::   The @code{setf} macro.
+* Adding Generalized Variables::    Defining new @code{setf} forms.
+
 Functions
 
 * What Is a Function::      Lisp functions vs. primitives; terminology.
@@ -996,6 +1001,8 @@
 * Resizing Windows::        Changing the sizes of windows.
 * Splitting Windows::       Splitting one window into two windows.
 * Deleting Windows::        Deleting a window gives its space to other windows.
+* Recombining Windows::     Preserving the frame layout when splitting and
+                              deleting windows.
 * Selecting Windows::       The selected window is the one that you edit in.
 * Cyclic Window Ordering::  Moving around the existing windows.
 * Buffers and Windows::     Each window displays the contents of a buffer.

=== modified file 'doc/lispref/frames.texi'
--- a/doc/lispref/frames.texi   2012-10-30 00:29:37 +0000
+++ b/doc/lispref/frames.texi   2012-11-05 14:30:58 +0000
@@ -419,16 +419,16 @@
 @code{initial-frame-alist} with values that match the X resources.
 @end defopt
 
-If these parameters specify a separate @dfn{minibuffer-only frame} with
address@hidden(minibuffer . nil)}, and you have not created one, Emacs creates
-one for you.
-
 @cindex minibuffer-only frame
+If these parameters include @code{(minibuffer . nil)}, that indicates
+that the initial frame should have no minibuffer.  In this case, Emacs
+creates a separate @dfn{minibuffer-only frame} as well.
+
 @defopt minibuffer-frame-alist
 This variable's value is an alist of parameter values used when
-creating an initial minibuffer-only frame.  This is the
-minibuffer-only frame that Emacs creates if @code{initial-frame-alist}
-specifies a frame with no minibuffer.
+creating an initial minibuffer-only frame (i.e.@: the minibuffer-only
+frame that Emacs creates if @code{initial-frame-alist} specifies a
+frame with no minibuffer).
 @end defopt
 
 @defopt default-frame-alist

=== modified file 'doc/lispref/lists.texi'
--- a/doc/lispref/lists.texi    2012-10-31 21:00:13 +0000
+++ b/doc/lispref/lists.texi    2012-11-07 05:22:10 +0000
@@ -234,17 +234,15 @@
 @end defun
 
 @defmac pop listname
-This macro is a way of examining the @sc{car} of a list,
-and taking it off the list, all at once.
address@hidden FIXME I don't think is a particularly good way to do it,
address@hidden but generalized variables have not been introduced yet.
-(In fact, this macro can act on generalized variables, not just lists.
address@hidden Variables}.)
+This macro provides a convenient way to examine the @sc{car} of a
+list, and take it off the list, all at once.  It operates on the list
+stored in @var{listname}.  It removes the first element from the list,
+saves the @sc{cdr} into @var{listname}, then returns the removed
+element.
 
-It operates on the list which is stored in the symbol @var{listname}.
-It removes this element from the list by setting @var{listname}
-to the @sc{cdr} of its old value---but it also returns the @sc{car}
-of that list, which is the element being removed.
+In the simplest case, @var{listname} is an unquoted symbol naming a
+list; in that case, this macro is equivalent to @address@hidden(prog1
+(car listname) (setq listname (cdr listname)))}}.
 
 @example
 x
@@ -255,7 +253,10 @@
      @result{} (b c)
 @end example
 
address@hidden
+More generally, @var{listname} can be a generalized variable.  In that
+case, this macro saves into @var{listname} using @code{setf}.
address@hidden Variables}.
+
 For the @code{push} macro, which adds an element to a list,
 @xref{List Variables}.
 @end defmac
@@ -683,13 +684,12 @@
   These functions, and one macro, provide convenient ways
 to modify a list which is stored in a variable.
 
address@hidden push newelt listname
-This macro provides an alternative way to write
address@hidden(setq @var{listname} (cons @var{newelt} @var{listname}))}.
address@hidden FIXME I don't think is a particularly good way to do it,
address@hidden but generalized variables have not been introduced yet.
-(In fact, this macro can act on generalized variables, not just lists.
address@hidden Variables}.)
address@hidden push element listname
+This macro creates a new list whose @sc{car} is @var{element} and
+whose @sc{cdr} is the list specified by @var{listname}, and saves that
+list in @var{listname}.  In the simplest case, @var{listname} is an
+unquoted symbol naming a list, and this macro is equivalent
+to @address@hidden(setq @var{listname} (cons @var{element} @var{listname}))}}.
 
 @example
 (setq l '(a b))
@@ -700,7 +700,11 @@
      @result{} (c a b)
 @end example
 
address@hidden
+More generally, @code{listname} can be a generalized variable.  In
+that case, this macro does the equivalent of @address@hidden(setf
address@hidden (cons @var{element} @var{listname}))}}.
address@hidden Variables}.
+
 For the @code{pop} macro, which removes the first element from a list,
 @xref{List Elements}.
 @end defmac

=== modified file 'doc/lispref/searching.texi'
--- a/doc/lispref/searching.texi        2012-09-22 15:24:26 +0000
+++ b/doc/lispref/searching.texi        2012-11-07 15:46:35 +0000
@@ -1310,22 +1310,31 @@
 @table @asis
 @item @samp{\&}
 @cindex @samp{&} in replacement
address@hidden&} stands for the entire text being replaced.
+This stands for the entire text being replaced.
 
address@hidden @address@hidden
address@hidden @address@hidden, where @var{n} is a digit
 @cindex @address@hidden in replacement
address@hidden@var{n}}, where @var{n} is a digit, stands for the text that
-matched the @var{n}th subexpression in the original regexp.
-Subexpressions are those expressions grouped inside @samp{\(@dots{}\)}.
-If the @var{n}th subexpression never matched, an empty string is substituted.
+This stands for the text that matched the @var{n}th subexpression in
+the original regexp.  Subexpressions are those expressions grouped
+inside @samp{\(@dots{}\)}.  If the @var{n}th subexpression never
+matched, an empty string is substituted.
 
 @item @samp{\\}
 @cindex @samp{\} in replacement
address@hidden stands for a single @samp{\} in the replacement text.
+This stands for a single @samp{\} in the replacement text.
+
address@hidden @samp{\?}
+This stands for itself (for compatibility with @code{replace-regexp}
+and related commands; @pxref{Regexp Replacement,,, emacs, The GNU
+Emacs Manual}).
 @end table
 
-These substitutions occur after case conversion, if any,
-so the strings they substitute are never case-converted.
address@hidden
+Any other character following @samp{\} signals an error.
+
+The substitutions performed by @samp{\&} and @address@hidden occur
+after case conversion, if any.  Therefore, the strings they substitute
+are never case-converted.
 
 If @var{subexp} is address@hidden, that says to replace just
 subexpression number @var{subexp} of the regexp that was matched, not

=== modified file 'doc/lispref/variables.texi'
--- a/doc/lispref/variables.texi        2012-10-31 19:23:06 +0000
+++ b/doc/lispref/variables.texi        2012-11-07 05:22:10 +0000
@@ -1262,6 +1262,13 @@
 @code{remove-hook}.
 @end deffn
 
address@hidden setq-local variable value
+This macro creates a buffer-local binding in the current buffer for
address@hidden, and gives it the buffer-local value @var{value}.  It
+is equivalent to calling @code{make-local-variable} followed by
address@hidden  @var{variable} should be an unquoted symbol.
address@hidden defmac
+
 @deffn Command make-variable-buffer-local variable
 This function marks @var{variable} (a symbol) automatically
 buffer-local, so that any subsequent attempt to set it will make it
@@ -1297,6 +1304,14 @@
 @code{make-variable-buffer-local} can be the best solution.
 @end deffn
 
address@hidden defvar-local variable value &optional docstring
+This macro defines @var{variable} as a variable with initial value
address@hidden and @var{docstring}, and marks it as automatically
+buffer-local.  It is equivalent to calling @code{defvar} followed by
address@hidden  @var{variable} should be an
+unquoted symbol.
address@hidden defmac
+
 @defun local-variable-p variable &optional buffer
 This returns @code{t} if @var{variable} is buffer-local in buffer
 @var{buffer} (which defaults to the current buffer); otherwise,
@@ -1948,7 +1963,6 @@
 @error{} Wrong type argument: integerp, 1000.0
 @end example
 
address@hidden FIXME?  Not sure this is the right place for this section.
 @node Generalized Variables
 @section Generalized Variables
 
@@ -1958,13 +1972,20 @@
 of arrays, properties of symbols, and many other locations are also
 places where Lisp values are stored.
 
address@hidden FIXME?  Not sure this is a useful analogy...
 Generalized variables are analogous to ``lvalues'' in the C
 language, where @samp{x = a[i]} gets an element from an array
 and @samp{a[i] = x} stores an element using the same notation.
 Just as certain forms like @code{a[i]} can be lvalues in C, there
 is a set of forms that can be generalized variables in Lisp.
 
address@hidden
+* Setting Generalized Variables::   The @code{setf} macro.
+* Adding Generalized Variables::    Defining new @code{setf} forms.
address@hidden menu
+
address@hidden Setting Generalized Variables
address@hidden The @code{setf} Macro
+
 The @code{setf} macro is the most basic way to operate on generalized
 variables.  The @code{setf} form is like @code{setq}, except that it
 accepts arbitrary place forms on the left side rather than just
@@ -1998,14 +2019,16 @@
 A call to any of the following standard Lisp functions:
 
 @smallexample
-car            cdr            nth            nthcdr
-caar           cadr           cdar           cddr
-aref           elt            get            gethash
-symbol-function        symbol-value          symbol-plist
+aref      cddr      symbol-function
+car       elt       symbol-plist
+caar      get       symbol-value
+cadr      gethash
+cdr       nth
+cdar      nthcdr  
 @end smallexample
 
 @item
-The following Emacs-specific functions are also @code{setf}-able:
+A call to any of the following Emacs-specific functions:
 
 @smallexample
 default-value                 process-get
@@ -2022,8 +2045,8 @@
 @end itemize
 
 @noindent
-Using any forms other than these in the @var{place} argument to
address@hidden will signal an error.
address@hidden signals an error if you pass a @var{place} form that it
+does not know how to handle.
 
 @c And for cl-lib's cl-getf.
 Note that for @code{nthcdr}, the list argument of the function must
@@ -2049,3 +2072,81 @@
 The @file{cl-lib} library defines various extensions for generalized
 variables, including additional @code{setf} places.
 @xref{Generalized Variables,,, cl, Common Lisp Extensions}.
+
+
address@hidden Adding Generalized Variables
address@hidden Defining new @code{setf} forms
+
+This section describes how to define new forms that @code{setf} can
+operate on.
+
address@hidden gv-define-simple-setter name setter &optional fix-return
+This macro enables you to easily define @code{setf} methods for simple
+cases.  @var{name} is the name of a function, macro, or special form.
+You can use this macro whenever @var{name} has a directly
+corresponding @var{setter} function that updates it, e.g.,
address@hidden(gv-define-simple-setter car setcar)}.
+
+This macro translates a call of the form
+
address@hidden
+(setf (@var{name} @address@hidden) @var{value})
address@hidden example
+
+into
address@hidden
+(@var{setter} @address@hidden @var{value})
address@hidden example
+
address@hidden
+Such a @code{setf} call is documented to return @var{value}.  This is
+no problem with, e.g., @code{car} and @code{setcar}, because
address@hidden returns the value that it set.  If your @var{setter}
+function does not return @var{value}, use a address@hidden value for
+the @var{fix-return} argument of @code{gv-define-simple-setter}.  This
+expands into something equivalent to
address@hidden
+(let ((temp @var{value}))
+  (@var{setter} @address@hidden temp)
+  temp)
address@hidden example
+so ensuring that it returns the correct result.
address@hidden defmac
+
+
address@hidden gv-define-setter name arglist &rest body
+This macro allows for more complex @code{setf} expansions than the
+previous form.  You may need to use this form, for example, if there
+is no simple setter function to call, or if there is one but it
+requires different arguments to the place form.
+
+This macro expands the form
address@hidden(setf (@var{name} @address@hidden) @var{value})} by
+first binding the @code{setf} argument forms
address@hidden(@var{value} @address@hidden)} according to @var{arglist},
+and then executing @var{body}.  @var{body} should return a Lisp
+form that does the assignment, and finally returns the value that was
+set.  An example of using this macro is:
+
address@hidden
+(gv-define-setter caar (val x) `(setcar (car ,x) ,val))
address@hidden example
address@hidden defmac
+
address@hidden FIXME?  Not sure what, if anything, to say about this.
address@hidden
address@hidden gv-define-expander name handler
+This is the most general way to define a new @code{setf} expansion.
address@hidden defmac
address@hidden ignore
+
address@hidden CL note---no @code{setf} functions
+Common Lisp defines another way to specify the @code{setf} behavior of
+a function, namely address@hidden functions'', whose names are lists
address@hidden(setf @var{name})} rather than symbols.  For example,
address@hidden(defun (setf foo) @dots{})} defines the function that is used
+when @code{setf} is applied to @code{foo}.  Emacs does not support
+this.  It is a compile-time error to use @code{setf} on a form that
+has not already had an appropriate expansion defined.  In Common Lisp,
+this is not an error since the function @code{(setf @var{func})} might
+be defined later.

=== modified file 'doc/lispref/windows.texi'
--- a/doc/lispref/windows.texi  2012-11-03 10:47:03 +0000
+++ b/doc/lispref/windows.texi  2012-11-07 09:41:52 +0000
@@ -16,8 +16,10 @@
 * Windows and Frames::      Relating windows to the frame they appear on.
 * Window Sizes::            Accessing a window's size.
 * Resizing Windows::        Changing the sizes of windows.
-* Splitting Windows::       Splitting one window into two windows.
-* Deleting Windows::        Deleting a window gives its space to other windows.
+* Splitting Windows::       Creating a new window.
+* Deleting Windows::        Removing a window from its frame.
+* Recombining Windows::     Preserving the frame layout when splitting and
+                              deleting windows.
 * Selecting Windows::       The selected window is the one that you edit in.
 * Cyclic Window Ordering::  Moving around the existing windows.
 * Buffers and Windows::     Each window displays the contents of a buffer.
@@ -587,7 +589,7 @@
 The choice of which window edges this function alters depends on the
 values of the option @code{window-combination-resize} and the
 combination limits of the involved windows; in some cases, it may alter
-both edges.  @xref{Splitting Windows}.  To resize by moving only the
+both edges.  @xref{Recombining Windows}.  To resize by moving only the
 bottom or right edge of a window, use the function
 @code{adjust-window-trailing-edge}, below.
 @end defun
@@ -795,222 +797,7 @@
 window @var{W3}.  A new internal window @var{W1} is created, becoming
 the new root window.
 
address@hidden window-combination-resize
-If this variable is @code{nil}, @code{split-window} can only split a
-window (denoted by @var{window}) if @var{window}'s screen area is large
-enough to accommodate both itself and the new window.
-
-If this variable is @code{t}, @code{split-window} tries to resize all
-windows that are part of the same combination as @var{window}, in order
-to accommodate the new window.  In particular, this may allow
address@hidden to succeed even if @var{window} is a fixed-size
-window or too small to ordinarily split.  Furthermore, subsequently
-resizing or deleting @var{window} may resize all other windows in its
-combination.
-
-The default is @code{nil}.  Other values are reserved for future use.
-The value of this variable is ignored when
address@hidden is address@hidden (see below).
address@hidden defopt
-
-  To illustrate the effect of @code{window-combination-resize},
-consider the following window configuration:
-
address@hidden
address@hidden
-     ______________________________________
-    | ____________________________________ |
-    ||                                    ||
-    ||                                    ||
-    ||                                    ||
-    ||                                    ||
-    ||_________________W2_________________||
-    | ____________________________________ |
-    ||                                    ||
-    ||                                    ||
-    ||                                    ||
-    ||                                    ||
-    ||_________________W3_________________||
-    |__________________W1__________________|
-
address@hidden group
address@hidden smallexample
-
address@hidden
-If @code{window-combination-resize} is @code{nil}, splitting window
address@hidden leaves the size of @code{W2} unchanged:
-
address@hidden
address@hidden
-     ______________________________________
-    | ____________________________________ |
-    ||                                    ||
-    ||                                    ||
-    ||                                    ||
-    ||                                    ||
-    ||_________________W2_________________||
-    | ____________________________________ |
-    ||                                    ||
-    ||_________________W3_________________||
-    | ____________________________________ |
-    ||                                    ||
-    ||_________________W4_________________||
-    |__________________W1__________________|
-
address@hidden group
address@hidden smallexample
-
address@hidden
-If @code{window-combination-resize} is @code{t}, splitting @code{W3}
-instead leaves all three live windows with approximately the same
-height:
-
address@hidden
address@hidden
-     ______________________________________
-    | ____________________________________ |
-    ||                                    ||
-    ||                                    ||
-    ||_________________W2_________________||
-    | ____________________________________ |
-    ||                                    ||
-    ||                                    ||
-    ||_________________W3_________________||
-    | ____________________________________ |
-    ||                                    ||
-    ||                                    ||
-    ||_________________W4_________________||
-    |__________________W1__________________|
-
address@hidden group
address@hidden smallexample
-
address@hidden window-combination-limit
-If the value of this variable is @code{t}, the @code{split-window}
-function always creates a new internal window.  If the value is
address@hidden, the new live window is allowed to share the existing
-parent window, if one exists, provided the split occurs in the same
-direction as the existing window combination (otherwise, a new
-internal window is created anyway).  The default is @code{nil}.  Other
-values are reserved for future use.
-
-Thus, if the value of this variable is at all times @code{t}, then at
-all times every window tree is a binary tree (a tree where each window
-except the root window has exactly one sibling).
-
-Furthermore, @code{split-window} calls
address@hidden on the newly-created internal
-window, recording the current value of this variable.  This affects
-how the window tree is rearranged when the child windows are deleted
-(see below).
address@hidden defopt
-
address@hidden window combination limit
address@hidden set-window-combination-limit window limit
-This functions sets the @dfn{combination limit} of the window
address@hidden to @var{limit}.  This value can be retrieved via the
-function @code{window-combination-limit}.  See below for its effects;
-note that it is only meaningful for internal windows.  The
address@hidden function automatically calls this function, passing
-the value of the variable @code{window-combination-limit} as
address@hidden
address@hidden defun
-
address@hidden window-combination-limit window
-This function returns the combination limit for @var{window}.
-
-The combination limit is meaningful only for an internal window.  If
-it is @code{nil}, then Emacs is allowed to automatically delete
address@hidden, in response to a window deletion, in order to group the
-child windows of @var{window} with its sibling windows to form a new
-window combination.  If the combination limit is @code{t}, the child
-windows of @var{window} are never automatically re-combined with its
-siblings.
address@hidden defun
-
-  To illustrate the effect of @code{window-combination-limit},
-consider the following configuration (throughout this example, we will
-assume that @code{window-combination-resize} is @code{nil}):
-
address@hidden
address@hidden
-     ______________________________________
-    | ____________________________________ |
-    ||                                    ||
-    ||                                    ||
-    ||                                    ||
-    ||                                    ||
-    ||                                    ||
-    ||                                    ||
-    ||_________________W2_________________||
-    | ____________________________________ |
-    ||                                    ||
-    ||                                    ||
-    ||_________________W3_________________||
-    |__________________W1__________________|
-
address@hidden group
address@hidden smallexample
-
address@hidden
-If @code{window-combination-limit} is @code{nil}, splitting @code{W2}
-into two windows, one above the other, yields
-
address@hidden
address@hidden
-     ______________________________________
-    | ____________________________________ |
-    ||                                    ||
-    ||                                    ||
-    ||_________________W2_________________||
-    | ____________________________________ |
-    ||                                    ||
-    ||                                    ||
-    ||_________________W4_________________||
-    | ____________________________________ |
-    ||                                    ||
-    ||                                    ||
-    ||_________________W3_________________||
-    |__________________W1__________________|
-
address@hidden group
address@hidden smallexample
-
address@hidden
-The newly-created window, @code{W4}, shares the same internal window
address@hidden  If @code{W4} is resized, it is allowed to resize the other
-live window, @code{W3}.
-
-  If @code{window-combination-limit} is @code{t}, splitting @code{W2}
-in the initial configuration would instead have produced this:
-
address@hidden
address@hidden
-     ______________________________________
-    | ____________________________________ |
-    || __________________________________ ||
-    |||                                  |||
-    |||________________W2________________|||
-    || __________________________________ ||
-    |||                                  |||
-    |||________________W4________________|||
-    ||_________________W5_________________||
-    | ____________________________________ |
-    ||                                    ||
-    ||                                    ||
-    ||_________________W3_________________||
-    |__________________W1__________________|
-
address@hidden group
address@hidden smallexample
-
address@hidden
-A new internal window @code{W5} has been created; its children are
address@hidden and the new live window @code{W4}.  Now, @code{W2} is the
-only sibling of @code{W4}, so resizing @code{W4} will resize
address@hidden, leaving @code{W3} unaffected.
-
-  For interactive use, Emacs provides two commands which always split
+   For interactive use, Emacs provides two commands which always split
 the selected window.  These call @code{split-window} internally.
 
 @deffn Command split-window-right &optional size
@@ -1063,7 +850,7 @@
 adjacent sibling windows, if any.  However, if the variable
 @code{window-combination-resize} is address@hidden, the space is
 proportionally distributed among any remaining windows in the window
-combination.  @xref{Splitting Windows}.
+combination.  @xref{Recombining Windows}.
 
 The behavior of this function may be altered by the window parameters
 of @var{window}, so long as the variable
@@ -1128,6 +915,353 @@
 are the opposite of what they are in those other functions.
 @end deffn
 
+
address@hidden Recombining Windows
address@hidden Recombining Windows
+
+When deleting the last sibling of a window @code{W}, its parent window
+is deleted too, with @code{W} replacing it in the window tree.  This
+means that @code{W} must be recombined with its parent's siblings to
+form a new window combination (@pxref{Windows and Frames}).  In some
+occasions, deleting a live window may even entail the deletion of two
+internal windows.
+
address@hidden
address@hidden
+     ______________________________________
+    | ______  ____________________________ |
+    ||      || __________________________ ||
+    ||      ||| ___________  ___________ |||
+    ||      ||||           ||           ||||
+    ||      ||||____W6_____||_____W7____||||
+    ||      |||____________W4____________|||
+    ||      || __________________________ ||
+    ||      |||                          |||
+    ||      |||                          |||
+    ||      |||____________W5____________|||
+    ||__W2__||_____________W3_____________ |
+    |__________________W1__________________|
+
address@hidden group
address@hidden smallexample
+
address@hidden
+Deleting @code{W5} in this configuration normally causes the deletion of
address@hidden and @code{W4}.  The remaining live windows @code{W2},
address@hidden and @code{W7} are recombined to form a new horizontal
+combination with parent @code{W1}.
+
+   Sometimes, however, it makes sense to not delete a parent window like
address@hidden  In particular, a parent window should not be removed when it
+was used to preserve a combination embedded in a combination of the same
+type.  Such embeddings make sense to assure that when you split a window
+and subsequently delete the new window, Emacs reestablishes the layout
+of the associated frame as it existed before the splitting.
+
+   Consider a scenario starting with two live windows @code{W2} and
address@hidden and their parent @code{W1}.
+
address@hidden
address@hidden
+     ______________________________________
+    | ____________________________________ |
+    ||                                    ||
+    ||                                    ||
+    ||                                    ||
+    ||                                    ||
+    ||                                    ||
+    ||                                    ||
+    ||_________________W2_________________||
+    | ____________________________________ |
+    ||                                    ||
+    ||                                    ||
+    ||_________________W3_________________||
+    |__________________W1__________________|
+
address@hidden group
address@hidden smallexample
+
address@hidden
+Split @code{W2} to make a new window @code{W4} as follows.
+
address@hidden
address@hidden
+     ______________________________________
+    | ____________________________________ |
+    ||                                    ||
+    ||                                    ||
+    ||_________________W2_________________||
+    | ____________________________________ |
+    ||                                    ||
+    ||                                    ||
+    ||_________________W4_________________||
+    | ____________________________________ |
+    ||                                    ||
+    ||                                    ||
+    ||_________________W3_________________||
+    |__________________W1__________________|
+
address@hidden group
address@hidden smallexample
+
address@hidden
+Now, when enlarging a window vertically, Emacs tries to obtain the
+corresponding space from its lower sibling, provided such a window
+exists.  In our scenario, enlarging @code{W4} will steal space from
address@hidden
+
address@hidden
address@hidden
+     ______________________________________
+    | ____________________________________ |
+    ||                                    ||
+    ||                                    ||
+    ||_________________W2_________________||
+    | ____________________________________ |
+    ||                                    ||
+    ||                                    ||
+    ||                                    ||
+    ||                                    ||
+    ||_________________W4_________________||
+    | ____________________________________ |
+    ||_________________W3_________________||
+    |__________________W1__________________|
+
address@hidden group
address@hidden smallexample
+
address@hidden
+Deleting @code{W4} will now give its entire space to @code{W2},
+including the space earlier stolen from @code{W3}.
+
address@hidden
address@hidden
+     ______________________________________
+    | ____________________________________ |
+    ||                                    ||
+    ||                                    ||
+    ||                                    ||
+    ||                                    ||
+    ||                                    ||
+    ||                                    ||
+    ||                                    ||
+    ||                                    ||
+    ||_________________W2_________________||
+    | ____________________________________ |
+    ||_________________W3_________________||
+    |__________________W1__________________|
+
address@hidden group
address@hidden smallexample
+
address@hidden
+This can be counterintutive, in particular if @code{W4} were used for
+displaying a buffer only temporarily (@pxref{Temporary Displays}), and
+you want to continue working with the initial layout.
+
+The behavior can be fixed by making a new parent window when splitting
address@hidden  The variable described next allows to do that.
+
address@hidden window-combination-limit
+This variable controls whether splitting a window shall make a new
+parent window.  The following values are recognized:
+
address@hidden @code
address@hidden nil
+This means that the new live window is allowed to share the existing
+parent window, if one exists, provided the split occurs in the same
+direction as the existing window combination (otherwise, a new internal
+window is created anyway).
+
address@hidden window-size
+In this case @code{display-buffer} makes a new parent window if it is
+passed a @code{window-height} or @code{window-width} entry in the
address@hidden argument (@pxref{Display Action Functions}).
+
address@hidden temp-buffer
+This value causes the creation of a new parent window when a window is
+split for showing a temporary buffer (@pxref{Temporary Displays}) only.
+
address@hidden display-buffer
+This means that when @code{display-buffer} (@pxref{Choosing Window})
+splits a window it always makes a new parent window.
+
address@hidden t
+In this case a new parent window is always created when splitting a
+window.  Thus, if the value of this variable is at all times @code{t},
+then at all times every window tree is a binary tree (a tree where each
+window except the root window has exactly one sibling).
address@hidden table
+
+The default is @code{nil}.  Other values are reserved for future use.
+
+If, as a consequence of this variable's setting, @code{split-window}
+makes a new parent window, it also calls
address@hidden (see below) on the newly-created
+internal window.  This affects how the window tree is rearranged when
+the child windows are deleted (see below).
address@hidden defopt
+
+  If @code{window-combination-limit} is @code{t}, splitting @code{W2} in
+the initial configuration of our scenario would have produced this:
+
address@hidden
address@hidden
+     ______________________________________
+    | ____________________________________ |
+    || __________________________________ ||
+    |||                                  |||
+    |||________________W2________________|||
+    || __________________________________ ||
+    |||                                  |||
+    |||________________W4________________|||
+    ||_________________W5_________________||
+    | ____________________________________ |
+    ||                                    ||
+    ||                                    ||
+    ||_________________W3_________________||
+    |__________________W1__________________|
+
address@hidden group
address@hidden smallexample
+
address@hidden
+A new internal window @code{W5} has been created; its children are
address@hidden and the new live window @code{W4}.  Now, @code{W2} is the only
+sibling of @code{W4}, so enlarging @code{W4} will try to shrink
address@hidden, leaving @code{W3} unaffected.  Observe that @code{W5}
+represents a vertical combination of two windows embedded in the
+vertical combination @code{W1}.
+
address@hidden window combination limit
address@hidden set-window-combination-limit window limit
+This functions sets the @dfn{combination limit} of the window
address@hidden to @var{limit}.  This value can be retrieved via the
+function @code{window-combination-limit}.  See below for its effects;
+note that it is only meaningful for internal windows.  The
address@hidden function automatically calls this function, passing
+it @code{t} as @var{limit}, provided the value of the variable
address@hidden is @code{t} when it is called.
address@hidden defun
+
address@hidden window-combination-limit window
+This function returns the combination limit for @var{window}.
+
+The combination limit is meaningful only for an internal window.  If it
+is @code{nil}, then Emacs is allowed to automatically delete
address@hidden, in response to a window deletion, in order to group the
+child windows of @var{window} with its sibling windows to form a new
+window combination.  If the combination limit is @code{t}, the child
+windows of @var{window} are never automatically recombined with its
+siblings.
+
+If, in the configuration shown at the beginning of this section, the
+combination limit of @code{W4} (the parent window of @code{W6} and
address@hidden) is @code{t}, deleting @code{W5} will not implicitly delete
address@hidden too.
address@hidden defun
+
+Alternatively, the problems sketched above can be avoided by always
+resizing all windows in the same combination whenever one of its windows
+is split or deleted.  This also permits to split windows that would be
+otherwise too small for such an operation.
+
address@hidden window-combination-resize
+If this variable is @code{nil}, @code{split-window} can only split a
+window (denoted by @var{window}) if @var{window}'s screen area is large
+enough to accommodate both itself and the new window.
+
+If this variable is @code{t}, @code{split-window} tries to resize all
+windows that are part of the same combination as @var{window}, in order
+to accommodate the new window.  In particular, this may allow
address@hidden to succeed even if @var{window} is a fixed-size
+window or too small to ordinarily split.  Furthermore, subsequently
+resizing or deleting @var{window} may resize all other windows in its
+combination.
+
+The default is @code{nil}.  Other values are reserved for future use.
+The value of this variable is ignored when
address@hidden is address@hidden
address@hidden defopt
+
+  To illustrate the effect of @code{window-combination-resize}, consider
+the following frame layout.
+
address@hidden
address@hidden
+     ______________________________________
+    | ____________________________________ |
+    ||                                    ||
+    ||                                    ||
+    ||                                    ||
+    ||                                    ||
+    ||_________________W2_________________||
+    | ____________________________________ |
+    ||                                    ||
+    ||                                    ||
+    ||                                    ||
+    ||                                    ||
+    ||_________________W3_________________||
+    |__________________W1__________________|
+
address@hidden group
address@hidden smallexample
+
address@hidden
+If @code{window-combination-resize} is @code{nil}, splitting window
address@hidden leaves the size of @code{W2} unchanged:
+
address@hidden
address@hidden
+     ______________________________________
+    | ____________________________________ |
+    ||                                    ||
+    ||                                    ||
+    ||                                    ||
+    ||                                    ||
+    ||_________________W2_________________||
+    | ____________________________________ |
+    ||                                    ||
+    ||_________________W3_________________||
+    | ____________________________________ |
+    ||                                    ||
+    ||_________________W4_________________||
+    |__________________W1__________________|
+
address@hidden group
address@hidden smallexample
+
address@hidden
+If @code{window-combination-resize} is @code{t}, splitting @code{W3}
+instead leaves all three live windows with approximately the same
+height:
+
address@hidden
address@hidden
+     ______________________________________
+    | ____________________________________ |
+    ||                                    ||
+    ||                                    ||
+    ||_________________W2_________________||
+    | ____________________________________ |
+    ||                                    ||
+    ||                                    ||
+    ||_________________W3_________________||
+    | ____________________________________ |
+    ||                                    ||
+    ||                                    ||
+    ||_________________W4_________________||
+    |__________________W1__________________|
+
address@hidden group
address@hidden smallexample
+
address@hidden
+Deleting any of the live windows @code{W2}, @code{W3} or @code{W4} will
+distribute its space proportionally among the two remaining live
+windows.
+
+
 @node Selecting Windows
 @section Selecting Windows
 @cindex selecting a window

=== modified file 'doc/misc/ChangeLog'
--- a/doc/misc/ChangeLog        2012-11-03 19:14:22 +0000
+++ b/doc/misc/ChangeLog        2012-11-10 23:13:33 +0000
@@ -1,3 +1,32 @@
+2012-11-10  Chong Yidong  <address@hidden>
+
+       * url.texi (Introduction): Move url-configuration-directory to
+       Customization node.
+       (Parsed URIs): Split into its own node.
+       (URI Encoding): New node.
+       (Defining New URLs): Remove empty chapter.
+       (Retrieving URLs): Add an introduction.  Doc fix for url-retrieve.
+       Improve docs for url-queue-*.
+       (Supported URL Types): Copyedits.  Delete empty subnodes.
+
+       * url.texi (Introduction): Rename from Getting Started.  Rewrite
+       the introduction.
+       (URI Parsing): Rewrite.  Omit the obsolete attributes slot.
+
+2012-11-10  Glenn Morris  <address@hidden>
+
+       * cl.texi (Obsolete Setf Customization):
+       Revert defsetf example to the more correct let rather than prog1.
+       Give define-modify-macro, defsetf, and define-setf-method
+       gv.el replacements.
+
+       * cl.texi (Overview): Mention EIEIO here, as well as the appendix.
+       (Setf Extensions): Remove obsolete reference.
+       (Obsolete Setf Customization):
+       Move note on lack of setf functions to lispref/variables.texi.
+       Undocument get-setf-method, since it no longer exists.
+       Mention simple defsetf replaced by gv-define-simple-setter.
+
 2012-11-03  Glenn Morris  <address@hidden>
 
        * cl.texi: Further general copyedits.

=== modified file 'doc/misc/cl.texi'
--- a/doc/misc/cl.texi  2012-11-03 18:55:29 +0000
+++ b/doc/misc/cl.texi  2012-11-07 22:23:34 +0000
@@ -107,7 +107,8 @@
 @item
 Some features are too complex or bulky relative to their benefit
 to Emacs Lisp programmers.  CLOS and Common Lisp streams are fine
-examples of this group.
+examples of this group.  (The separate package EIEIO implements
+a subset of CLOS functionality.  @xref{Top, , Introduction, eieio, EIEIO}.)
 
 @item
 Other features cannot be implemented without modification to the
@@ -974,7 +975,7 @@
 The generalized variable @code{buffer-substring}, listed above,
 also works in this way by replacing a portion of the current buffer.
 
address@hidden FIXME? Also `eq'? (see cl-lib.el)
address@hidden FIXME?  Also `eq'? (see cl-lib.el)
 
 @c Currently commented out in cl.el.
 @ignore
@@ -989,13 +990,10 @@
 @xref{Obsolete Setf Customization}.
 @end ignore
 
address@hidden FIXME?  Is this still true?
 @item
 A macro call, in which case the macro is expanded and @code{setf}
 is applied to the resulting form.
-
address@hidden
-Any form for which a @code{defsetf} or @code{define-setf-method}
-has been made.  @xref{Obsolete Setf Customization}.
 @end itemize
 
 @c FIXME should this be in lispref?  It seems self-evident.
@@ -2867,7 +2865,6 @@
 This function creates a new, uninterned symbol (using @code{make-symbol})
 with a unique name.  (The name of an uninterned symbol is relevant
 only if the symbol is printed.)  By default, the name is generated
address@hidden FIXME no longer true?
 from an increasing sequence of numbers, @samp{G1000}, @samp{G1001},
 @samp{G1002}, etc.  If the optional argument @var{x} is a string, that
 string is used as a prefix instead of @samp{G}.  Uninterned symbols
@@ -4481,14 +4478,6 @@
 between IEEE floating-point plus and minus zero.  The @code{cl-equalp}
 predicate has several differences with Common Lisp; @pxref{Predicates}.
 
address@hidden FIXME consider moving to lispref
address@hidden
-The @code{setf} mechanism is entirely compatible, except that
-setf-methods return a list of five values rather than five
-values directly.  Also, the new address@hidden function'' concept
-(typified by @code{(defun (setf foo) @dots{})}) is not implemented.
address@hidden ignore
-
 The @code{cl-do-all-symbols} form is the same as @code{cl-do-symbols}
 with no @var{obarray} argument.  In Common Lisp, this form would
 iterate over all symbols in all packages.  Since Emacs obarrays
@@ -4907,15 +4896,17 @@
 @code{defsetf}, and @code{define-setf-method}, that allow the
 user to extend generalized variables in various ways.
 In Emacs, these are obsolete, replaced by various features of
address@hidden in Emacs 24.3.  Many of the implementation
-details in the following are out-of-date.
address@hidden FIXME this whole section needs updating.
address@hidden in Emacs 24.3.
address@hidden Generalized Variables,,,elisp,GNU Emacs Lisp Reference Manual}.
+
 
 @defmac define-modify-macro name arglist function [doc-string]
 This macro defines a ``read-modify-write'' macro similar to
address@hidden and @code{cl-decf}.  The macro @var{name} is defined
-to take a @var{place} argument followed by additional arguments
-described by @var{arglist}.  The call
address@hidden and @code{cl-decf}.  You can replace this macro
+with @code{gv-letplace}.
+
+The macro @var{name} is defined to take a @var{place} argument
+followed by additional arguments described by @var{arglist}.  The call
 
 @example
 (@var{name} @var{place} @address@hidden)
@@ -4938,8 +4929,8 @@
 For example:
 
 @example
-(define-modify-macro cl-incf (&optional (n 1)) +)
-(define-modify-macro cl-concatf (&rest args) concat)
+(define-modify-macro incf (&optional (n 1)) +)
+(define-modify-macro concatf (&rest args) concat)
 @end example
 
 Note that @code{&key} is not allowed in @var{arglist}, but
@@ -4948,16 +4939,31 @@
 Most of the modify macros defined by Common Lisp do not exactly
 follow the pattern of @code{define-modify-macro}.  For example,
 @code{push} takes its arguments in the wrong order, and @code{pop}
-is completely irregular.  You can define these macros ``by hand''
-using @code{get-setf-method}, or consult the source
-to see how to use the internal @code{setf} building blocks.
+is completely irregular.
+
+The above @code{incf} example could be written using
address@hidden as:
address@hidden
+(defmacro incf (place &optional n)
+  (gv-letplace (getter setter) place
+    (macroexp-let2 nil v (or n 1)
+      (funcall setter `(+ ,v ,getter)))))
address@hidden example
address@hidden
+(defmacro concatf (place &rest args)
+  (gv-letplace (getter setter) place
+    (macroexp-let2 nil v (mapconcat 'identity args "")
+      (funcall setter `(concat ,getter ,v)))))
address@hidden ignore
 @end defmac
 
 @defmac defsetf access-fn update-fn
-This is the simpler of two @code{defsetf} forms.  Where
address@hidden is the name of a function which accesses a place,
-this declares @var{update-fn} to be the corresponding store
-function.  From now on,
+This is the simpler of two @code{defsetf} forms, and is
+replaced by @code{gv-define-simple-setter}.
+
+With @var{access-fn} the name of a function that accesses a place,
+this declares @var{update-fn} to be the corresponding store function.
+From now on,
 
 @example
 (setf (@var{access-fn} @var{arg1} @var{arg2} @var{arg3}) @var{value})
@@ -4972,7 +4978,7 @@
 
 @noindent
 The @var{update-fn} is required to be either a true function, or
-a macro which evaluates its arguments in a function-like way.  Also,
+a macro that evaluates its arguments in a function-like way.  Also,
 the @var{update-fn} is expected to return @var{value} as its result.
 Otherwise, the above expansion would not obey the rules for the way
 @code{setf} is supposed to behave.
@@ -4988,25 +4994,32 @@
   temp)
 @end example
 
-Some examples of the use of @code{defsetf}, drawn from the standard
-suite of setf methods, are:
+Some examples are:
 
 @example
 (defsetf car setcar)
-(defsetf symbol-value set)
 (defsetf buffer-name rename-buffer t)
 @end example
+
+These translate directly to @code{gv-define-simple-setter}:
+
address@hidden
+(gv-define-simple-setter car setcar)
+(gv-define-simple-setter buffer-name rename-buffer t)
address@hidden example
 @end defmac
 
 @defmac defsetf access-fn arglist (store-var) address@hidden
-This is the second, more complex, form of @code{defsetf}.  It is
-rather like @code{defmacro} except for the additional @var{store-var}
-argument.  The @var{forms} should return a Lisp form that stores
-the value of @var{store-var} into the generalized variable formed
-by a call to @var{access-fn} with arguments described by @var{arglist}.
-The @var{forms} may begin with a string which documents the @code{setf}
-method (analogous to the doc string that appears at the front of a
-function).
+This is the second, more complex, form of @code{defsetf}.
+It can be replaced by @code{gv-define-setter}.
+
+This form of @code{defsetf} is rather like @code{defmacro} except for
+the additional @var{store-var} argument.  The @var{forms} should
+return a Lisp form that stores the value of @var{store-var} into the
+generalized variable formed by a call to @var{access-fn} with
+arguments described by @var{arglist}.  The @var{forms} may begin with
+a string which documents the @code{setf} method (analogous to the doc
+string that appears at the front of a function).
 
 For example, the simple form of @code{defsetf} is shorthand for
 
@@ -5021,20 +5034,28 @@
 setf-method will insert temporary variables as needed to make
 sure the apparent order of evaluation is preserved.
 
-Another example drawn from the standard package:
+Another standard example:
 
 @example
 (defsetf nth (n x) (store)
-  (list 'setcar (list 'nthcdr n x) store))
+  `(setcar (nthcdr ,n ,x) ,store))
address@hidden example
+
+You could write this using @code{gv-define-setter} as:
+
address@hidden
+(gv-define-setter nth (store n x)
+  `(setcar (nthcdr ,n ,x) ,store))
 @end example
 @end defmac
 
 @defmac define-setf-method access-fn arglist address@hidden
-This is the most general way to create new place forms.  When
-a @code{setf} to @var{access-fn} with arguments described by
address@hidden is expanded, the @var{forms} are evaluated and
-must return a list of five items:
address@hidden FIXME Is this still true?
+This is the most general way to create new place forms.  You can
+replace this by @code{gv-define-setter} or @code{gv-define-expander}.
+
+When a @code{setf} to @var{access-fn} with arguments described by
address@hidden is expanded, the @var{forms} are evaluated and must
+return a list of five items:
 
 @enumerate
 @item
@@ -5063,6 +5084,9 @@
 except that the method returns a list of five values rather
 than the five values themselves, since Emacs Lisp does not
 support Common Lisp's notion of multiple return values.
+(Note that the @code{setf} implementation provided by @file{gv.el}
+does not use this five item format.  Its use here is only for
+backwards compatibility.)
 
 Once again, the @var{forms} may begin with a documentation string.
 
@@ -5078,45 +5102,22 @@
 setf-method itself to optimize.
 @end defmac
 
address@hidden Removed in Emacs 24.3, not possible to make a compatible 
replacement.
address@hidden
 @defun get-setf-method place &optional env
 This function returns the setf-method for @var{place}, by
 invoking the definition previously recorded by @code{defsetf}
 or @code{define-setf-method}.  The result is a list of five
 values as described above.  You can use this function to build
 your own @code{cl-incf}-like modify macros.
address@hidden These no longer exist.
address@hidden
-(Actually, it is better to use the internal functions
address@hidden and @code{cl-setf-do-store}, which are a bit
-easier to use and which also do a number of optimizations; consult the
-source code for the @code{cl-incf} function for a simple example.)
address@hidden ignore
 
 The argument @var{env} specifies the ``environment'' to be
 passed on to @code{macroexpand} if @code{get-setf-method} should
 need to expand a macro in @var{place}.  It should come from
 an @code{&environment} argument to the macro or setf-method
 that called @code{get-setf-method}.
-
address@hidden FIXME No longer true.
-See also the source code for the setf-method for
address@hidden Also @code{apply}, but that is commented out.
address@hidden, which works by calling @code{get-setf-method} on a
-simpler case, then massaging the result.
 @end defun
-
address@hidden FIXME does not belong here any more, maybe in lispref?
-Modern Common Lisp defines a second, independent way to specify
-the @code{setf} behavior of a function, namely address@hidden
-functions'' whose names are lists @code{(setf @var{name})}
-rather than symbols.  For example, @code{(defun (setf foo) @dots{})}
-defines the function that is used when @code{setf} is applied to
address@hidden  This package does not currently support @code{setf}
-functions.  In particular, it is a compile-time error to use
address@hidden on a form which has not already been @code{defsetf}'d
-or otherwise declared; in newer Common Lisps, this would not be
-an error since the function @code{(setf @var{func})} might be
-defined later.
address@hidden ignore
 
 
 @node GNU Free Documentation License

=== modified file 'doc/misc/url.texi'
--- a/doc/misc/url.texi 2012-08-06 21:50:25 +0000
+++ b/doc/misc/url.texi 2012-11-09 08:34:17 +0000
@@ -18,7 +18,7 @@
 @end direntry
 
 @copying
-This file documents the Emacs Lisp URL loading package.
+This is the manual for the @code{url} Emacs Lisp library.
 
 Copyright @copyright{} 1993-1999, 2002, 2004-2012 Free Software Foundation, 
Inc.
 
@@ -57,10 +57,10 @@
 @end ifnottex
 
 @menu
-* Getting Started::             Preparing your program to use URLs.
+* Introduction::                About the @code{url} library.
+* URI Parsing::                 Parsing (and unparsing) URIs.
 * Retrieving URLs::             How to use this package to retrieve a URL.
 * Supported URL Types::         Descriptions of URL types currently supported.
-* Defining New URLs::           How to define a URL loader for a new protocol.
 * General Facilities::          URLs can be cached, accessed via a gateway
                                 and tracked in a history list.
 * Customization::               Variables you can alter.
@@ -70,93 +70,129 @@
 * Concept Index::
 @end menu
 
address@hidden Getting Started
address@hidden Getting Started
address@hidden URLs, definition
address@hidden URIs
-
address@hidden Resource Locators} (URLs) are a specific form of
address@hidden Resource Identifiers} (URI) described in RFC 2396 which
-updates RFC 1738 and RFC 1808.  RFC 2016 defines uniform resource
-agents.
-
-URIs have the form @var{scheme}:@var{scheme-specific-part}, where the
address@hidden supported by this library are described below.
address@hidden URL Types}.
-
-FTP, NFS, HTTP, HTTPS, @code{rlogin}, @code{telnet}, tn3270,
-IRC and gopher URLs all have the form
-
address@hidden
address@hidden://@address@hidden@@@address@hidden@r{[}:@address@hidden@r{[}/@address@hidden
address@hidden example
address@hidden Introduction
address@hidden Introduction
address@hidden URL
address@hidden URI
address@hidden uniform resource identifier
address@hidden uniform resource locator
+
+A @dfn{Uniform Resource Identifier} (URI) is a specially-formatted
+name, such as an Internet address, that identifies some name or
+resource.  The format of URIs is described in RFC 3986, which updates
+and replaces the earlier RFCs 2732, 2396, 1808, and 1738.  A
address@hidden Resource Locator} (URL) is an older but still-common
+term, which basically refers to a URI corresponding to a resource that
+can be accessed (usually over a network) in a specific way.
+
+  Here are some examples of URIs (taken from RFC 3986):
+
address@hidden
+ftp://ftp.is.co.za/rfc/rfc1808.txt
+http://www.ietf.org/rfc/rfc2396.txt
+ldap://[2001:db8::7]/c=GB?objectClass?one
+mailto:John.Doe@@example.com
+news:comp.infosystems.www.servers.unix
+tel:+1-816-555-1212
+telnet://192.0.2.16:80/
+urn:oasis:names:specification:docbook:dtd:xml:4.1.2
address@hidden example
+
+  This manual describes the @code{url} library, an Emacs Lisp library
+for parsing URIs and retrieving the resources to which they refer.
+(The library is so-named for historical reasons; nowadays, the ``URI''
+terminology is regarded as the more general one, and ``URL'' is
+technically obsolete despite its widespread vernacular usage.)
+
address@hidden URI Parsing
address@hidden URI Parsing
+
+  A URI consists of several @dfn{components}, each having a different
+meaning.  For example, the URI
+
address@hidden
+http://www.gnu.org/software/emacs/
address@hidden example
+
 @noindent
-where @address@hidden and @address@hidden delimit optional parts.
address@hidden sometimes takes the form @var{username}:@var{password}
-but you should beware of the security risks of sending cleartext
-passwords.  @var{hostname} may be a domain name or a dotted decimal
-address.  If the @samp{:@var{port}} is omitted then the library will
-use the ``well known'' port for that service when accessing URLs.  With
-the possible exception of @code{telnet}, it is rare for ports to be
-specified, and it is possible using a non-standard port may have
-undesired consequences if a different service is listening on that
-port (e.g., an HTTP URL specifying the SMTP port can cause mail to be
-sent). @c , but @xref{Other Variables, url-bad-port-list}.
-The meaning of the @var{path} component depends on the service.
+specifies the scheme component @samp{http}, the hostname component
address@hidden, and the path component @samp{/software/emacs/}.
+
address@hidden parsed URIs
+  The format of URIs is specified by RFC 3986.  The @code{url} library
+provides the Lisp function @code{url-generic-parse-url}, a (mostly)
+standard-compliant URI parser, as well as function
address@hidden, which converts a parsed URI back into a URI
+string.
+
address@hidden url-generic-parse-url uri-string
+This function returns a parsed version of the string @var{uri-string}.
address@hidden defun
+
address@hidden url-recreate-url uri-obj
address@hidden unparsing URLs
+Given a parsed URI, this function returns the corresponding URI string.
address@hidden defun
+
address@hidden parsed URI
+  The return value of @code{url-generic-parse-url}, and the argument
+expected by @code{url-recreate-url}, is a @dfn{parsed URI}: a CL
+structure whose slots hold the various components of the URI.
address@hidden,the CL Manual,,cl,GNU Emacs Common Lisp Emulation}, for
+details about CL structures.  Most of the other functions in the
address@hidden library act on parsed URIs.
 
 @menu
-* Configuration::
-* Parsed URLs::                 URLs are parsed into vector structures.
+* Parsed URIs::           Format of parsed URI structures.
+* URI Encoding::          address@hidden characters in URIs.
 @end menu
 
address@hidden Configuration
address@hidden Configuration
-
address@hidden url-configuration-directory
address@hidden @file{~/.url}
address@hidden configuration files
-The directory in which URL configuration files, the cache etc.,
-reside.  The old default was @file{~/.url}, and this directory
-is still used if it exists.  The new default is a @file{url/}
-directory in @code{user-emacs-directory}, which is normally
address@hidden/.emacs.d}.
address@hidden defvar
-
address@hidden Parsed URLs
address@hidden Parsed URLs
address@hidden parsed URLs
-The library functions typically operate on @dfn{parsed} versions of
-URLs.  These are actually CL structures (vectors) of the form:
-
address@hidden
-[cl-struct-url @var{type} @var{user} @var{password} @var{host} @var{port} 
@var{filename} @var{target} @var{attributes} @var{fullness} @var{use-cookies}]
address@hidden example
-
address@hidden where
address@hidden @var
address@hidden Parsed URIs
address@hidden Parsed URI structures
+
+  Each parsed URI structure contains the following slots:
+
address@hidden @code
 @item type
-is the type of the URL scheme, e.g., @code{http}
+The URI scheme (a string, e.g.@: @code{http}).  @xref{Supported URL
+Types}, for a list of schemes that the @code{url} library knows how to
+process.  This slot can also be @code{nil}, if the URI is not fully
+specified.
+
 @item user
-is the username associated with it, or @code{nil};
+The user name (a string), or @code{nil}.
+
 @item password
-is the user password associated with it, or @code{nil};
+The user password (a string), or @code{nil}.  The use of this URI
+component is strongly discouraged; nowadays, passwords are transmitted
+by other means, not as part of a URI.
+
 @item host
-is the host name associated with it, or @code{nil};
+The host name (a string), or @code{nil}.  If present, this is
+typically a domain name or IP address.
+
 @item port
-is the port number associated with it, or @code{nil};
+The port number (an integer), or @code{nil}.  Omitting this component
+usually means to use the ``standard'' port associated with the URI
+scheme.
+
 @item filename
-is the ``file'' part of it, or @code{nil}.  This doesn't necessarily
-actually refer to a file;
+The combination of the ``path'' and ``query'' components of the URI (a
+string), or @code{nil}.  If the query component is present, it is the
+substring following the first @samp{?} character, and the path
+component is the substring before the @samp{?}.  The meaning of these
+components is scheme-dependent; they do not necessarily refer to a
+file on a disk.
+
 @item target
-is the target part, or @code{nil};
address@hidden attributes
-is the attributes associated with it, or @code{nil};
+The fragment component (a string), or @code{nil}.  The fragment
+component specifies a ``secondary resource'', such as a section of a
+webpage.
+
 @item fullness
-is @code{t} for a fully-specified URL, with a host part indicated by
address@hidden//} after the scheme part.
address@hidden use-cookies
-is @code{nil} to neither send or store cookies to the server, @code{t}
-otherwise.
+This is @code{t} if the URI is fully specified, i.e.@: the
+hierarchical components of the URI (the hostname and/or username
+and/or password) are preceded by @samp{//}.
 @end table
 
 @findex url-type
@@ -168,64 +204,165 @@
 @findex url-target
 @findex url-attributes
 @findex url-fullness
-These attributes have accessors named @address@hidden, where
address@hidden is the name of one of the elements above, e.g.,
address@hidden  These attributes can be set with the same accessors
-using @code{setf}:
+These slots have accessors named @address@hidden, where
address@hidden is the slot name.  For example, the accessor for the
address@hidden slot is the function @code{url-host}.  The @code{url-port}
+accessor returns the default port for the URI scheme if the parsed
+URI's @var{port} slot is @code{nil}.
+
+  The slots can be set using @code{setf}.  For example:
 
 @example
 (setf (url-port url) 80)
 @end example
 
-If @var{port} is @var{nil}, @code{url-port} returns the default port
-of the protocol.
-
-There are functions for parsing and unparsing between the string and
-vector forms.
-
address@hidden url-generic-parse-url url
-Return a parsed version of the string @var{url}.
address@hidden defun
-
address@hidden url-recreate-url url
address@hidden unparsing URLs
-Recreates a URL string from the parsed @var{url}.
address@hidden URI Encoding
address@hidden URI Encoding
+
address@hidden percent encoding
+  The @code{url-generic-parse-url} parser does not obey RFC 3986 in
+one respect: it allows address@hidden characters in URI strings.
+
+  Strictly speaking, RFC 3986 compatible URIs may only consist of
address@hidden characters; address@hidden characters are
+represented by converting them to UTF-8 byte sequences, and performing
address@hidden encoding} on the bytes.  For example, the o-umlaut
+character is converted to the UTF-8 byte sequence @samp{\xD3\xA7},
+then percent encoded to @samp{%D3%A7}.  (Certain ``reserved''
address@hidden characters must also be percent encoded when they
+appear in URI components.)
+
+  The function @code{url-encode-url} can be used to convert a URI
+string containing arbitrary characters to one that is properly
+percent-encoded in accordance with RFC 3986.
+
address@hidden url-encode-url url-string
+This function return a properly URI-encoded version of
address@hidden  It also performs @dfn{URI normalization},
+e.g.@: converting the scheme component to lowercase if it was
+previously uppercase.
address@hidden defun
+
+  To convert between a string containing arbitrary characters and a
+percent-encoded address@hidden string, use the functions
address@hidden and @code{url-unhex-string}:
+
address@hidden url-hexify-string string &optional allowed-chars
+This function performs percent-encoding on @var{string}, and returns
+the result.
+
+If @var{string} is multibyte, it is first converted to a UTF-8 byte
+string.  Each byte corresponding to an allowed character is left
+as-is, while all other bytes are converted to a three-character
+sequence: @samp{%} followed by two upper-case hex digits.
+
address@hidden url-unreserved-chars
address@hidden unreserved characters
+The allowed characters are specified by @var{allowed-chars}.  If this
+argument is @code{nil}, the allowed characters are those specified as
address@hidden characters} by RFC 3986 (see the variable
address@hidden).  Otherwise, @var{allowed-chars} should
+be a vector whose @var{n}-th element is address@hidden if character
address@hidden is allowed.
address@hidden defun
+
address@hidden url-unhex-string string &optional allow-newlines
+This function replaces percent-encoding sequences in @var{string} with
+their character equivalents, and returns the resulting string.
+
+If @var{allow-newlines} is address@hidden, it allows the decoding of
+carriage returns and line feeds, which are normally forbidden in URIs.
 @end defun
 
 @node Retrieving URLs
 @chapter Retrieving URLs
 
+  The @code{url} library defines the following three functions for
+retrieving the data specified by a URL.  The actual retrieval protocol
+depends on the URL's URI scheme, and is performed by lower-level
+scheme-specific functions.  (Those lower-level functions are not
+documented here, and generally should not be called directly.)
+
+  In each of these functions, the @var{url} argument can be either a
+string or a parsed URL structure.  If it is a string, that string is
+passed through @code{url-encode-url} before using it, to ensure that
+it is properly URI-encoded (@pxref{URI Encoding}).
+
 @defun url-retrieve-synchronously url
-Retrieve @var{url} synchronously and return a buffer containing the
-data.  @var{url} is either a string or a parsed URL structure.  Return
address@hidden if there are no data associated with it (the case for dired,
-info, or mailto URLs that need no further processing).
+This function synchronously retrieves the data specified by @var{url},
+and returns a buffer containing the data.  The return value is
address@hidden if there is no data associated with the URL (as is the case
+for @code{dired}, @code{info}, and @code{mailto} URLs).
 @end defun
 
 @defun url-retrieve url callback &optional cbargs silent no-cookies
-Retrieve @var{url} asynchronously and call @var{callback} with args
address@hidden when finished.  The callback is called when the object
-has been completely retrieved, with the current buffer containing the
-object and any MIME headers associated with it.  @var{url} is either a
-string or a parsed URL structure.  Returns the buffer @var{url} will
-load into, or @code{nil} if the process has already completed.
-If the optional argument @var{silent} is address@hidden, suppress
-progress messages.  If the optional argument @var{no-cookies} is
address@hidden, do not store or send cookies.
+This function retrieves @var{url} asynchronously, calling the function
address@hidden when the object has been completely retrieved.  The
+return value is the buffer into which the data will be inserted, or
address@hidden if the process has already completed.
+
+The callback function is called this way:
+
address@hidden
+(apply @var{callback} @var{status} @var{cbargs})
address@hidden example
+
address@hidden
+where @var{status} is a plist representing what happened during the
+retrieval, with most recent events first, or an empty list if no
+events have occurred.  Each pair in the plist is one of:
+
address@hidden @code
address@hidden (:redirect @var{redirected-to})
+This means that the request was redirected to the URL
address@hidden
+
address@hidden (:error (@var{error-symbol} . @var{data}))
+This means that an error occurred.  If so desired, the error can be
+signaled with @code{(signal @var{error-symbol} @var{data})}.
address@hidden table
+
+When the callback function is called, the current buffer is the one
+containing the retrieved data (if any).  The buffer also contains any
+MIME headers associated with the data retrieval.
+
+If the optional argument @var{silent} is address@hidden, progress
+messages are suppressed.  If the optional argument @var{no-cookies} is
address@hidden, cookies are not stored or sent.
address@hidden defun
+
address@hidden url-queue-retrieve url callback &optional cbargs silent 
no-cookies
+This function acts like @code{url-retrieve}, but with limits on the
+number of concurrently-running network processes.  The option
address@hidden controls the number of concurrent
+processes, and the option @code{url-queue-timeout} sets a timeout in
+seconds.
+
+To use this function, you must @code{(require 'url-queue)}.
 @end defun
 
 @vindex url-queue-parallel-processes
address@hidden url-queue-parallel-processes
+The value of this option is an integer specifying the maximum number
+of concurrent @code{url-queue-retrieve} network processes.  If the
+number of @code{url-queue-retrieve} calls is larger than this number,
+later ones are queued until ealier ones are finished.
address@hidden defopt
+
 @vindex url-queue-timeout
address@hidden url-queue-retrieve url callback &optional cbargs silent 
no-cookies
-This acts like the @code{url-retrieve} function, but with limits on
-the degree of parallelism.  The option @code{url-queue-parallel-processes}
-controls the number of concurrent processes, and the option
address@hidden sets a timeout in seconds.
address@hidden defun
address@hidden url-queue-timeout
+The value of this option is a number specifying the maximum lifetime
+of a @code{url-queue-retrieve} network process, once it is started.
+If a process is not finished by then, it is killed and removed from
+the queue.
address@hidden defopt
 
 @node Supported URL Types
 @chapter Supported URL Types
 
+This chapter describes functions and variables affecting URL retrieval
+for specific schemes.
+
 @menu
 * http/https::                  Hypertext Transfer Protocol.
 * file/ftp::                    Local files and FTP archives.
@@ -236,48 +373,31 @@
 * irc::                         Internet Relay Chat.
 * data::                        Embedded data URLs.
 * nfs::                         Networked File System
address@hidden * finger::
address@hidden * gopher::
address@hidden * netrek::
address@hidden * prospero::
-* cid::                         Content-ID.
-* about::
 * ldap::                        Lightweight Directory Access Protocol
-* imap::                        IMAP mailboxes.
 * man::                         Unix man pages.
 @end menu
 
 @node http/https
 @section @code{http} and @code{https}
 
-The scheme @code{http} is Hypertext Transfer Protocol.  The library
-supports version 1.1, specified in RFC 2616.  (This supersedes 1.0,
-defined in RFC 1945) HTTP URLs have the following form, where most of
-the parts are optional:
address@hidden
-http://@var{user}:@var{password}@@@var{host}:@var{port}/@address@hidden@var{fragment}
address@hidden example
address@hidden The @code{:@var{port}} part is optional, and @var{port} defaults 
to
address@hidden 80.  The @code{/@var{path}} part, if present, is a 
slash-separated
address@hidden series elements.  The @address@hidden, if present, is the
address@hidden query for a search or the content of a form submission.  The
address@hidden @code{#fragment} part, if present, is a location in the document.
+The @code{http} scheme refers to the Hypertext Transfer Protocol.  The
address@hidden library supports HTTP version 1.1, specified in RFC 2616.
+Its default port is 80.
 
-The scheme @code{https} is a secure version of @code{http}, with
-transmission via SSL.  It is defined in RFC 2069.  Its default port is
-443.  This scheme depends on SSL support in Emacs via the
address@hidden library and is actually implemented by forcing the
address@hidden gateway method to be used.  @xref{Gateways in general}.
+  The @code{https} scheme is a secure version of @code{http}, with
+transmission via SSL.  It is defined in RFC 2069, and its default port
+is 443.  When using @code{https}, the @code{url} library performs SSL
+encryption via the @code{ssl} library, by forcing the @code{ssl}
+gateway method to be used.  @xref{Gateways in general}.
 
 @defopt url-honor-refresh-requests
-This controls honoring of HTTP @samp{Refresh} headers by which
-servers can direct clients to reload documents from the same URL or a
-or different one.  @code{nil} means they will not be honored,
address@hidden (the default) means they will always be honored, and
-otherwise the user will be asked on each request.
+If this option is address@hidden (the default), the @code{url} library
+honors the HTTP @samp{Refresh} header, which is used by servers to
+direct clients to reload documents from the same URL or a or different
+one.  If the value is @code{nil}, the @samp{Refresh} header is
+ignored; any other value means to ask the user on each request.
 @end defopt
 
-
 @menu
 * Cookies::
 * HTTP language/coding::
@@ -409,26 +529,32 @@
 @cindex compressed files
 @cindex dired
 
+The @code{ftp} and @code{file} schemes are defined in RFC 1808.  The
address@hidden library treats @samp{ftp:} and @samp{file:} as synonymous.
+Such URLs have the form
+
 @example
 ftp://@var{user}:@var{password}@@@var{host}:@var{port}/@var{file}
 file://@var{user}:@var{password}@@@var{host}:@var{port}/@var{file}
 @end example
 
-These schemes are defined in RFC 1808.
address@hidden:} and @samp{file:} are synonymous in this library.  They
-allow reading arbitrary files from hosts.  Either @samp{ange-ftp}
-(Emacs) or @samp{efs} (XEmacs) is used to retrieve them from remote
-hosts.  Local files are accessed directly.
address@hidden
+If the URL specifies a local file, it is retrieved by reading the file
+contents in the usual way.  If it specifies a remote file, it is
+retrieved using the Ange-FTP package.  @xref{Remote Files,,, emacs,
+The GNU Emacs Manual}.
 
-Compressed files are handled, but support is hard-coded so that
address@hidden and so on have no affect.
-Suffixes recognized are @samp{.z}, @samp{.gz}, @samp{.Z} and
address@hidden
+  When retrieving a compressed file, it is automatically uncompressed
+if it has the file suffix @file{.z}, @file{.gz}, @file{.Z},
address@hidden, or @file{.xz}.  (The list of supported suffixes is
+hard-coded, and cannot be altered by customizing
address@hidden)
 
 @defopt url-directory-index-file
-The filename to look for when indexing a directory, default
address@hidden"index.html"}.  If this file exists, and is readable, then it
-will be viewed instead of using @code{dired} to view the directory.
+This option specifies the filename to look for when a @code{file} or
address@hidden URL specifies a directory.  The default is
address@hidden  If this file exists and is readable, it is viewed.
+Otherwise, Emacs visits the directory using Dired.
 @end defopt
 
 @node info
@@ -437,47 +563,53 @@
 @cindex Texinfo
 @findex Info-goto-node
 
+The @code{info} scheme is non-standard.  Such URLs have the form
+
 @example
 info:@address@hidden
 @end example
 
-Info URLs are not officially defined.  They invoke
address@hidden with argument @samp{(@var{file})@var{node}}.
address@hidden@var{node}} is optional, defaulting to @samp{Top}.
address@hidden
+and are retrieved by invoking @code{Info-goto-node} with argument
address@hidden(@var{file})@var{node}}.  If @address@hidden is omitted, the
address@hidden node is opened.
 
 @node mailto
 @section mailto
 
 @cindex mailto
 @cindex email
-A mailto URL will send an email message to the address in the
-URL, for example @samp{mailto:foo@@bar.com} would compose a
-message to @samp{foo@@bar.com}.
+A @code{mailto} URL specifies an email message to be sent to a given
+email address.  For example, @samp{mailto:foo@@bar.com} specifies
+sending a message to @samp{foo@@bar.com}.  The ``retrieval method''
+for such URLs is to open a mail composition buffer in which the
+appropriate content (e.g.@: the recipient address) has been filled in.
+
+  As defined in RFC 2368, a @code{mailto} URL has the form
+
address@hidden
address@hidden:@address@hidden@var{contents}[&@address@hidden
address@hidden example
+
address@hidden
+where an arbitrary number of @var{header}s can be added.  If the
address@hidden is @samp{body}, then @var{contents} is put in the message
+body; otherwise, a @var{header} header field is created with
address@hidden as its contents.  Note that the @code{url} library does
+not perform any checking of @var{header} or @var{contents}, so you
+should check them before sending the message.
 
 @defopt url-mail-command
 @vindex mail-user-agent
-The function called whenever url needs to send mail.  This should
-normally be left to default from @var{mail-user-agent}.  @xref{Mail
-Methods, , Mail-Composition Methods, emacs, The GNU Emacs Manual}.
+The value of this variable is the function called whenever url needs
+to send mail.  This should normally be left its default, which is the
+standard mail-composition command @code{compose-mail}.  @xref{Sending
+Mail,,, emacs, The GNU Emacs Manual}.
 @end defopt
 
-An @samp{X-Url-From} header field containing the URL of the document
-that contained the mailto URL is added if that URL is known.
-
-RFC 2368 extends the definition of mailto URLs in RFC 1738.
-The form of a mailto URL is
address@hidden
address@hidden:@address@hidden@var{contents}[&@address@hidden
address@hidden example
address@hidden where an arbitrary number of @var{header}s can be added.  If the
address@hidden is @samp{body}, then @var{contents} is put in the body
-otherwise a @var{header} header field is created with @var{contents}
-as its contents.  Note that the URL library does not consider any
-headers ``dangerous'' so you should check them before sending the
-message.
-
address@hidden Fixme: update
-Email messages are defined in @sc{rfc}822.
+  If the document containing the @code{mailto} URL itself possessed a
+known URL, Emacs automatically inserts an @samp{X-Url-From} header
+field into the mail buffer, specifying that URL.
 
 @node news/nntp/snews
 @section @code{news}, @code{nntp} and @code{snews}
@@ -487,11 +619,13 @@
 @cindex NNTP
 @cindex snews
 
address@hidden draft-gilman-news-url-01
-The network news URL scheme take the following forms following RFC
-1738 except that for compatibility with other clients, host and port
-fields may be included in news URLs though they are properly only
-allowed for nntp an snews.
+The @code{news}, @code{nntp}, and @code{snews} schemes, defined in RFC
+1738, are used for reading Usenet newsgroups.  For compatibility with
+non-standard-compliant news clients, the @code{url} library allows
+host and port fields to be included in @code{news} URLs, even though
+they are properly only allowed for @code{nntp} and @code{snews}.
+
+  @code{news} and @code{nntp} URLs have the following form:
 
 @table @samp
 @item news:@var{newsgroup}
@@ -506,24 +640,22 @@
 Similar to the @samp{news} versions.
 @end table
 
address@hidden:@var{port}} is optional and defaults to :119.
-
address@hidden is the same as @samp{nntp} except that the default port
-is :563.
address@hidden SSL
-(It is tunneled through SSL.)
-
-An @samp{nntp} URL is the same as a news URL, except that the URL may
-specify an article by its number.
-
address@hidden url-news-server
-This variable can be used to override the default news server.
-Usually this will be set by the Gnus package, which is used to fetch
-news.
+  The default port for @code{nntp} (and @code{news}) is 119.  The
+difference between an @code{nntp} URL and a @code{news} URL is that an
address@hidden URL may specify an article by its number.  The
address@hidden scheme is the same as @samp{nntp}, except that it is
+tunneled through SSL and has default port 563.
+
+  These URLs are retrieved via the Gnus package.
+
 @cindex environment variable
 @vindex NNTPSERVER
-It may be set from the conventional environment variable
address@hidden
address@hidden url-news-server
+This variable specifies the default news server from which to fetch
+news, if no server was specified in the URL.  The default value,
address@hidden, means to use the server specified by the standard
+environment variable @samp{NNTPSERVER}, or @samp{news} if that
+environment variable is unset.
 @end defopt
 
 @node rlogin/telnet/tn3270
@@ -534,12 +666,15 @@
 @cindex terminal emulation
 @findex terminal-emulator
 
-These URL schemes from RFC 1738 for logon via a terminal emulator have
-the form
+These URL schemes are defined in RFC 1738, and are used for logging in
+via a terminal emulator.  They have the form
+
 @example
 telnet://@var{user}:@var{password}@@@var{host}:@var{port}
 @end example
-but the @code{:@var{password}} component is ignored.
+
address@hidden
+but the @var{password} component is ignored.
 
 To handle rlogin, telnet and tn3270 URLs, a @code{rlogin},
 @code{telnet} or @code{tn3270} (the program names and arguments are
@@ -553,39 +688,43 @@
 @cindex ZEN IRC
 @cindex ERC
 @cindex rcirc
address@hidden Fixme: reference (was 
http://www.w3.org/Addressing/draft-mirashi-url-irc-01.txt)
address@hidden Relay Chat} (IRC) is handled by handing off the @sc{irc}
-session to a function named in @code{url-irc-function}.
+
+  The @code{irc} scheme is defined in the Internet Draft at
address@hidden://www.w3.org/Addressing/draft-mirashi-url-irc-01.txt} (which
+was never approved as an RFC).  Such URLs have the form
+
address@hidden
+irc://@var{host}:@var{port}/@var{target},@var{needpass}
address@hidden example
+
address@hidden
+and are retrieved by opening an @acronym{IRC} session using the
+function specified by @code{url-irc-function}.
 
 @defopt url-irc-function
-A function to actually open an IRC connection.
-This function
-must take five arguments, @var{host}, @var{port}, @var{channel},
address@hidden and @var{password}.  The @var{channel} argument specifies the
-channel to join immediately, this can be @code{nil}.  By default this is
address@hidden
+The value of this option is a function, which is called to open an IRC
+connection for @code{irc} URLs.  This function must take five
+arguments, @var{host}, @var{port}, @var{channel}, @var{user} and
address@hidden  The @var{channel} argument specifies the channel to
+join immediately, and may be @code{nil}.
+
+The default is @code{url-irc-rcirc}, which uses the Rcirc package.
+Other options are @code{url-irc-erc} (which uses ERC) and
address@hidden (which uses ZenIRC).
 @end defopt
address@hidden url-irc-rcirc host port channel user password
-Processes the arguments and lets @code{rcirc} handle the session.
address@hidden defun
address@hidden url-irc-erc host port channel user password
-Processes the arguments and lets @code{ERC} handle the session.
address@hidden defun
address@hidden url-irc-zenirc host port channel user password
-Processes the arguments and lets @code{zenirc} handle the session.
address@hidden defun
 
 @node data
 @section data
 @cindex data URLs
 
+  The @code{data} scheme, defined in RFC 2397, contains MIME data in
+the URL itself.  Such URLs have the form
+
 @example
 data:@address@hidden@address@hidden;@address@hidden,@var{data}
 @end example
 
-Data URLs contain MIME data in the URL itself.  They are defined in
-RFC 2397.
-
address@hidden
 @var{media-type} is a MIME @samp{Content-Type} string, possibly
 including parameters.  It defaults to
 @samp{text/plain;charset=US-ASCII}.  The @samp{text/plain} can be
@@ -598,14 +737,14 @@
 @cindex Network File System
 @cindex automounter
 
+The @code{nfs} scheme, defined in RFC 2224, is similar to @code{ftp}
+except that it points to a file on a remote host that is handled by an
+NFS automounter on the local host.  Such URLs have the form
+
 @example
 nfs://@var{user}:@var{password}@@@var{host}:@var{port}/@var{file}
 @end example
 
-The @samp{nfs:} scheme is defined in RFC 2224.  It is similar to
address@hidden:} except that it points to a file on a remote host that is
-handled by the automounter on the local host.
-
 @defvar url-nfs-automounter-directory-spec
 @end defvar
 A string saying how to invoke the NFS automounter.  Certain @samp{%}
@@ -628,15 +767,6 @@
 
 Each can be used any number of times.
 
address@hidden cid
address@hidden cid
address@hidden Content-ID
-
-RFC 2111
-
address@hidden about
address@hidden about
-
 @node ldap
 @section ldap
 @cindex LDAP
@@ -644,50 +774,21 @@
 
 The LDAP scheme is defined in RFC 2255.
 
address@hidden imap
address@hidden imap
address@hidden IMAP
-
-RFC 2192
-
 @node man
 @section man
 @cindex @command{man}
 @cindex Unix man pages
 @findex man
 
+The @code{man} scheme is a non-standard one.  Such URLs have the form
+
 @example
 @samp{man:@var{page-spec}}
 @end example
 
-This is a non-standard scheme.  @var{page-spec} is passed directly to
-the Lisp @code{man} function.
-
address@hidden Defining New URLs
address@hidden Defining New URLs
-
address@hidden
-* Naming conventions::
-* Required functions::
-* Optional functions::
-* Asynchronous fetching::
-* Supporting file-name-handlers::
address@hidden menu
-
address@hidden Naming conventions
address@hidden Naming conventions
-
address@hidden Required functions
address@hidden Required functions
-
address@hidden Optional functions
address@hidden Optional functions
-
address@hidden Asynchronous fetching
address@hidden Asynchronous fetching
-
address@hidden Supporting file-name-handlers
address@hidden Supporting file-name-handlers
address@hidden
+and are retrieved by passing @var{page-spec} to the Lisp function
address@hidden
 
 @node General Facilities
 @chapter General Facilities
@@ -1108,11 +1209,9 @@
 @node Customization
 @chapter Customization
 
address@hidden Environment Variables
-
 @cindex environment variables
-The following environment variables affect the library's operation at
-startup.
+  The following environment variables affect the @code{url} library's
+operation at startup.
 
 @table @code
 @item TMPDIR
@@ -1122,10 +1221,21 @@
 it.
 @end table
 
address@hidden General User Options
-
-The following user options, settable with Customize, affect the
-general operation of the package.
+  The following user options affect the general operation of
address@hidden library.
+
address@hidden url-configuration-directory
address@hidden configuration files
+The value of this variable specifies the name of the directory where
+the @code{url} library stores its various configuration files, cache
+files, etc.
+
+The default value specifies a subdirectory named @file{url/} in the
+standard Emacs user data directory specified by the variable
address@hidden (normally @file{~/.emacs.d}).  However,
+the old default was @file{~/.url}, and this directory is used instead
+if it exists.
address@hidden defopt
 
 @defopt url-debug
 @cindex debugging

=== modified file 'etc/ERC-NEWS'
--- a/etc/ERC-NEWS      2012-01-19 07:21:25 +0000
+++ b/etc/ERC-NEWS      2012-11-08 04:20:00 +0000
@@ -1,8 +1,10 @@
 ERC NEWS                                                       -*- outline -*-
 
-Copyright (C) 2006-2012  Free Software Foundation, Inc.
+Copyright (C) 2006-2012 Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
+* For changes after ERC 5.3, see the main Emacs NEWS file
+
 * Changes in ERC 5.3
 
 ** New function `erc-tls' is to be used for connecting to a server via TLS.

=== modified file 'etc/GNUS-NEWS'
--- a/etc/GNUS-NEWS     2012-06-26 22:52:31 +0000
+++ b/etc/GNUS-NEWS     2012-11-09 08:11:23 +0000
@@ -9,6 +9,9 @@
 
 * New features
 
+** New package `gnus-notifications.el' can send notifications when you
+   receive new messages.
+
 ** If you have the "tnef" program installed, Gnus will display ms-tnef
    files, aka "winmail.dat".
 

=== modified file 'etc/NEWS'
--- a/etc/NEWS  2012-11-09 22:20:47 +0000
+++ b/etc/NEWS  2012-11-10 23:13:33 +0000
@@ -150,15 +150,14 @@
 ---
 *** In minibuffer filename prompts, `C-M-f' and `C-M-b' now move to the
 next and previous path separator, respectively.
-
++++
 *** minibuffer-electric-default-mode can rewrite (default ...) to [...].
 Just set minibuffer-eldef-shorten-default to t before enabling the mode.
 
 ** ImageMagick support, if available, is automatically enabled.
 It is no longer necessary to call `imagemagick-register-types'
 explicitly to install ImageMagick image types; that function is called
-automatically at startup, or when customizing a relevant imagemagick-
-option.
+automatically at startup, or when customizing an imagemagick- option.
 +++
 *** Setting `imagemagick-types-inhibit' to t now disables the use of
 ImageMagick to view images.  You must call imagemagick-register-types
@@ -188,6 +187,7 @@
 ** `C-x C-q' is now bound to the new minor mode `read-only-mode'.
 This minor mode replaces `toggle-read-only', which is now obsolete.
 
++++
 ** Emacs now generates backtraces on fatal errors.
 On encountering a fatal error, Emacs now outputs a textual description
 of the fatal signal, and a short backtrace on platforms like glibc
@@ -359,13 +359,16 @@
 A side effect is that vars without corresponding value are bound to nil
 rather than making them unbound.
 
-*** The following methods of extending `setf' are obsolete.
-Use gv.el instead (FIXME; details).
-`define-setf-expander', `defsetf', `define-modify-macro'
++++
+*** The following methods of extending `setf' are obsolete
+(use features from gv.el instead):
+`define-modify-macro' (use `gv-letplace')
+`defsetf' (use `gv-define-simple-setter' or `gv-define-setter')
+`define-setf-expander' (use `gv-define-setter' or `gv-define-expander')
+`get-setf-method' no longer exists (see "Incompatible Lisp Changes")
 
-** Compilation mode
 +++
-*** New option `compilation-always-kill'.
+** New compilation option `compilation-always-kill'.
 
 ** Customize
 ---
@@ -375,10 +378,9 @@
 `customize-apropos-options' (i.e. the prefix argument does nothing for
 these commands now).
 
-** Desktop
 ---
-*** `desktop-path' no longer includes the "." directory.  Desktop
-files are now located in ~/.emacs.d by default.
+** `desktop-path' no longer includes the "." directory.
+Desktop files are now located in ~/.emacs.d by default.
 
 ** D-Bus
 
@@ -412,18 +414,21 @@
 
 ** Diff mode
 
+---
 *** Changes are now highlighted using the same color scheme as in
 modern VCSes.  Deletions are displayed in red (new faces
-`diff-refine-removed' and `smerge-refined-removed' and new definition
+`diff-refine-removed' and `smerge-refined-removed', and new definition
 of `diff-removed'), insertions in green (new faces `diff-refine-added'
-and `smerge-refined-added' and new definition of `diff-added').
+and `smerge-refined-added', and new definition of `diff-added').
 
+---
 *** The variable `diff-use-changed-face' defines whether to use the
 face `diff-changed', or `diff-removed' and `diff-added' to highlight
 changes in context diffs.
 
-*** The new command `diff-remove-trailing-whitespace' fixes trailing
-whitespace problems introduced by the diff.
++++
+*** The new command `diff-delete-trailing-whitespace' removes trailing
+whitespace introduced by a diff.
 
 ** Dired
 +++
@@ -449,37 +454,34 @@
 ---
 ** Ediff now uses the same color scheme as Diff mode.
 
-** erc will look up server/channel names via auth-source and use the
-channel keys found, if any.
+** ERC
+
+*** New package `erc-desktop-notifications.el', which can send a notification
+when you receive a private message or your nickname is mentioned.
+
+*** ERC will look up server/channel names via auth-source and use any
+channel keys found.
 
 ** Flymake uses fringe bitmaps to indicate errors and warnings.
 See `flymake-fringe-indicator-position', `flymake-error-bitmap' and
 `flymake-warning-bitmap'.
 
-** Follow mode
----
-*** The obsolete variable `follow-mode-off-hook' has been removed.
----
-*** Follow mode no longer works by using advice.
+---
+** Follow mode no longer works by using advice.
 The option `follow-intercept-processes' has been removed.
 
-** FFAP
-
-*** The option `ffap-url-unwrap-remote' can now be a list of strings,
+** The FFAP option `ffap-url-unwrap-remote' can now be a list of strings,
 specifying URL types which should be converted to remote file names at
 the FFAP prompt.  The default is now '("ftp").
 
-** Generic-x
-`javascript-generic-mode' is now an obsolete alias for `js-mode'.
-
-** Ibuffer
-
-*** New `derived-mode' filter, bound to `/ M'.
+** New Ibuffer `derived-mode' filter, bound to `/ M'.
 The old binding for `/ M' (filter by used-mode) is now bound to `/ m'.
 
-** Mouse Avoidance mode
+---
+** `javascript-generic-mode' is now an obsolete alias for `js-mode'.
+
 +++
-*** New variable `mouse-avoidance-banish-position' specifies where the
+** New option `mouse-avoidance-banish-position' specifies where the
 `banish' mouse avoidance setting moves the mouse.
 
 +++
@@ -547,37 +549,28 @@
 python-switch-to-python   | python-shell-switch-to-shell
 python-describe-symbol    | python-eldoc-at-point
 
+---
 ** reStructuredText mode
 
-*** Rebind nearly all keys making room for more keys and complying
-better to usage in other modes.  Describe bindings with C-c C-h.
-
-*** Major revision of indentation working very similar to other
-modes.  TAB is your friend.
-
-*** Major revision of filling working fine with most of
-reStructuredText syntax.  Support auto-filling.
-
-*** Major revision of comment handling.
-
-*** Major revision of fontification working with `jit-lock-mode'.
-
-*** Cover reStructuredText syntax more closely.  Improve
-the experience for Sphinx users.
+*** Keybindings (see `C-c C-h'), TAB indentation, filling and auto-filling,
+fontification, comment handling, and customization have all been revised
+and improved.
+
+*** Support for `imenu' and `which-function-mode'.
+
+*** The reStructuredText syntax is more closely covered.
+Sphinx support has been improved.
 
 *** `rst-insert-list' inserts new list or continues existing lists.
 
-*** Extend correct and improve customization.
-
-*** Negative prefix argument always works for `rst-adjust'.
-
-*** Reset window configuration after displaying TOC.
-
-*** Package version in `rst-version'.
-
-*** Support `imenu' and `which-func'.
-
-** SH Script mode
+*** A negative prefix argument always works for `rst-adjust'.
+
+*** The window configuration is reset after displaying a TOC.
+
+*** The constant `rst-version' describes the rst.el package version.
+
+---
+** Shell Script mode
 
 *** Pairing of parens/quotes uses electric-pair-mode instead of skeleton-pair.
 
@@ -585,49 +578,45 @@
 
 *** `sh-use-smie' lets you choose a new indentation and navigation code.
 
-** Shell
-
-*** New option `async-shell-command-buffer' specifies what buffer to use
+** New option `async-shell-command-buffer' specifies the buffer to use
 for a new asynchronous shell command when the default output buffer
-`*Async Shell Command*' is already taken by another running command.
-
-** SQL Mode
-
-*** DB2 added `sql-db2-escape-newlines'
-
+`*Async Shell Command*' is already in use.
+
+---
+** SQL mode has a new option `sql-db2-escape-newlines'.
 If non-nil, newlines sent to the command interpreter will be escaped
 by a backslash.  The default does not escape the newlines and assumes
 that the sql statement will be terminated by a semicolon.
 
 ** Tabulated List and packages derived from it
-
++++
 *** New command `tabulated-list-sort', bound to `S', sorts the column
 at point, or the Nth column if a numeric prefix argument is given.
 
 ** Term
-
-The variables `term-default-fg-color' and `term-default-bg-color' are
-now deprecated in favor of the `term-face' face, that you can
-customize.  Also, it is now possible to customize how are displayed the
-ANSI terminal colors and styles by customizing the corresponding
-`term-color-<COLOR>', `term-color-underline' and `term-color-bold'
-faces.
++++
+*** The variables `term-default-fg-color' and `term-default-bg-color' are
+now deprecated in favor of the customizable face `term'.
++++
+*** You can customize how to display ANSI terminal colors and styles
+by customizing the corresponding `term-color-<COLOR>',
+`term-color-underline' and `term-color-bold' faces.
 
 ** Tramp
 +++
-*** The syntax has been extended in order to allow ad-hoc proxy
-definitions.  See the manual for details.
+*** The syntax has been extended in order to allow ad-hoc proxy definitions.
+See the manual for details.
 +++
 *** Remote processes are now supported also on remote Windows host.
 
 ** URL
-
++++
 *** Structs made by `url-generic-parse-url' have nil `attributes' slot.
 Previously, this slot stored semicolon-separated attribute-value pairs
 appended to some imap URLs, but this is not compatible with RFC 3986.
 So now the `filename' slot stores the entire path and query components
 and the `attributes' slot is always nil.
-
++++
 *** New function `url-encode-url' for encoding a URI string.
 The `url-retrieve' function now uses this to encode its URL argument,
 in case that is not properly encoded.
@@ -643,9 +632,8 @@
 
 *** Accepts \r and \f as whitespace.
 
-** Which Function mode
 +++
-*** `which-func-modes' now defaults to t, so Which Function mode, when
+** `which-func-modes' now defaults to t, so Which Function mode, when
 enabled, applies to all applicable major modes.
 
 ---
@@ -686,6 +674,8 @@
 inefficiency, and not namespace-clean.
 ---
 *** bruce.el
++++
+*** cust-print.el
 ---
 *** ledit.el
 ---
@@ -694,14 +684,6 @@
 *** mouse-sel.el
 ---
 *** patcomp.el
-+++
-*** cust-print.el
-
-
-* New Modes and Packages in Emacs 24.3
-
-FIXME? erc-desktop-notifications.el, gv.el, profiler.el,
-gnus-notifications.el, mm-archive.el
 
 
 * Incompatible Lisp Changes in Emacs 24.3
@@ -720,6 +702,7 @@
 font name as a string.  Whether it returns a font spec or a font name
 depends on the graphical library.
 
++++
 ** If the NEWTEXT arg to `replace-match' contains a substring "\?",
 that substring is inserted literally even if the LITERAL arg is
 non-nil, instead of causing an error to be signaled.
@@ -745,6 +728,13 @@
 but keywords or keyword-string pairs.  The old argument list will
 still be supported for Emacs 24.x.
 
++++
+** The CL package's `get-setf-method' function no longer exists.
+Generalized variables are now part of core Emacs Lisp, and implemented
+differently to the way cl.el used to do it.  It is not possible to
+define a compatible replacement for `get-setf-method'.  See the file
+gv.el for internal details of the new implementation.
+
 ** Spelling changes.
 Some Lisp symbols have been renamed to avoid problems with spelling
 that is incorrect or inconsistent with how Emacs normally spells a word.
@@ -776,16 +766,18 @@
      deactivate-current-input-method-function
 
 +++
-** Some obsolete functions, variables, and faces were removed:
+** Some obsolete functions, variables, and faces have been removed:
+*** `last-input-char', `last-command-char', `unread-command-char'
 *** `facemenu-unlisted-faces'
 *** `rmail-decode-mime-charset'
-*** `last-input-char', `last-command-char', `unread-command-char'.
 *** `iswitchb-read-buffer'
 *** `sc-version', `sc-submit-bug-report'
 *** `set-char-table-default'
-*** `string-to-sequence' (use `string-to-list' or `string-to-vector').
+*** `string-to-sequence' (use `string-to-list' or `string-to-vector')
 *** `compile-internal'
+*** `modeline'
 *** `mode-line-inverse-video'
+*** `follow-mode-off-hook'
 *** `cvs-commit-buffer-require-final-newline'
 (use `log-edit-require-final-newline' instead)
 *** `cvs-changelog-full-paragraphs'
@@ -794,18 +786,20 @@
 *** `vc-ignore-vc-files' (use `vc-handled-backends' instead)
 *** `vc-master-templates' (use `vc-handled-backends' instead)
 *** `vc-checkout-carefully'
-*** `modeline'
 
 
 * Lisp changes in Emacs 24.3
 
 ** New sampling-based Elisp profiler.
-Try M-x profiler-start ... M-x profiler-stop; and then M-x profiler-report.
-The sampling rate can be based on CPU time (only supported on some
-systems), or based on memory allocations.
+Try M-x profiler-start, do some work, and then call M-x profiler-report.
+When finished, use M-x profiler-stop.  The sampling rate can be based on
+CPU time (only supported on some systems) or memory allocations.
 
++++
 ** CL-style generalized variables are now in core Elisp.
 `setf' is autoloaded; `push' and `pop' accept generalized variables.
+You can define your own generalized variables using `gv-define-simple-setter',
+`gv-define-setter', etc.
 
 +++
 ** `defun' also accepts a (declare DECLS) form, like `defmacro'.
@@ -837,7 +831,7 @@
 *** Set `debug-on-message' to enter the debugger when a certain
 message is displayed in the echo area.  This can be useful when trying
 to work out which code is doing something.
-
+---
 *** New var `inhibit-debugger', automatically set to prevent accidental
 recursive invocations.
 
@@ -845,7 +839,7 @@
 +++
 *** The functions get-lru-window, get-mru-window and get-largest-window
 now accept a third argument to avoid choosing the selected window.
-
++++
 *** Additional values recognized for option `window-combination-limit'.
 
 *** New macro `with-temp-buffer-window'.
@@ -931,9 +925,9 @@
 
 ** Miscellaneous new functions:
 +++
-*** `autoloadp'
+*** `autoloadp' tests if its argument is an autoloaded object.
 +++
-*** `autoload-do-load'
+*** `autoload-do-load' performs the autoloading operation.
 +++
 *** `buffer-narrowed-p' tests if the buffer is narrowed.
 +++
@@ -950,6 +944,7 @@
 +++
 *** `tty-top-frame' returns the topmost frame of a text terminal.
 
++++
 ** New macros `setq-local' and `defvar-local'.
 
 +++
@@ -960,13 +955,13 @@
 
 ** The following functions and variables are obsolete:
 ---
-*** `automount-dir-prefix'
+*** `automount-dir-prefix' (use `directory-abbrev-alist')
 +++
 *** `buffer-has-markers-at'
 ---
 *** `macro-declaration-function' (use `macro-declarations-alist')
 ---
-*** `window-system-version'
+*** `window-system-version' (provides no useful information)
 ---
 *** `dired-pop-to-buffer' (use `dired-mark-pop-up')
 ---

=== modified file 'lisp/ChangeLog'
--- a/lisp/ChangeLog    2012-11-10 01:28:22 +0000
+++ b/lisp/ChangeLog    2012-11-10 23:13:33 +0000
@@ -1,3 +1,78 @@
+2012-11-10  Glenn Morris  <address@hidden>
+
+       * term.el (term-default-fg-color, term-default-bg-color):
+       Make obsolete, rather than just saying "deprecated" in the doc.
+
+       * term.el (term): Rename from `term-face'.
+       (term-current-face, ansi-term-color-vector)
+       (term-default-fg-color, term-default-bg-color, term-ansi-reset):
+       Update all users.
+
+2012-11-10  Jan Dj??rv  <address@hidden>
+
+       * server.el (server-create-window-system-frame): Handle Nextstep
+       specially (Bug#12780).
+
+2012-11-10  Glenn Morris  <address@hidden>
+
+       * mail/emacsbug.el (report-emacs-bug-query-existing-bugs):
+       Unautoload, and make obsolete.  (Bug#7449)
+
+2012-11-10  Chong Yidong  <address@hidden>
+
+       * vc/diff-mode.el (diff-delete-trailing-whitespace): Rewrite, and
+       rename from diff-remove-trailing-whitespace (Bug#12831).
+
+2012-11-10  Stefan Monnier  <address@hidden>
+
+       * emacs-lisp/advice.el: Require `cl-lib' at run-time to fix
+       miscompilation of trace.el.
+
+2012-11-10  Glenn Morris  <address@hidden>
+
+       * vc/diff-mode.el (diff-remove-trailing-whitespace): Doc fix.
+
+2012-11-10  Stefan Monnier  <address@hidden>
+
+       * emacs-lisp/gv.el (gv-define-simple-setter): Fix last change
+       (bug#12812).
+
+2012-11-10  Chong Yidong  <address@hidden>
+
+       * minibuf-eldef.el (minibuffer-eldef-shorten-default): Convert to
+       a defcustom with an appropriate :set function.
+       (minibuffer-default--in-prompt-regexps): New function.
+
+2012-11-10  Glenn Morris  <address@hidden>
+
+       * emacs-lisp/cl.el (define-setf-expander, defsetf)
+       (define-modify-macro): Doc fixes.
+
+       * emacs-lisp/gv.el (gv-letplace): Fix doc typo.
+       (gv-define-simple-setter): Update doc of `fix-return'.
+
+2012-11-10  Stefan Monnier  <address@hidden>
+
+       * emacs-lisp/gv.el (gv-define-simple-setter): Don't evaluate `val'
+       twice when `fix-return' is set (bug#12813).
+
+       * emacs-lisp/cl.el (defsetf): Pass the third arg to
+       gv-define-simple-setter (bug#12812).
+
+       * woman.el (woman-decode-region): Disable adaptive-fill when rendering
+       (bug#12756).
+
+2012-11-10  Glenn Morris  <address@hidden>
+
+       * emacs-lisp/gv.el (gv-define-setter): Fix doc typo.
+
+       * emacs-lisp/cl-extra.el (cl-prettyexpand):
+       * emacs-lisp/cl-lib.el (cl-proclaim, cl-declaim):
+       * emacs-lisp/cl-macs.el (cl-destructuring-bind, cl-locally)
+       (cl-the, cl-compiler-macroexpand): Add basic doc strings.
+
+       * emacs-lisp/cl-extra.el (cl-maplist, cl-mapcan): Doc fix.
+
 2012-11-10  Leo Liu  <address@hidden>
 
        * ido.el (ido-set-matches-1): Improve flex matching performance by

=== modified file 'lisp/emacs-lisp/advice.el'
--- a/lisp/emacs-lisp/advice.el 2012-11-09 22:20:47 +0000
+++ b/lisp/emacs-lisp/advice.el 2012-11-10 23:13:33 +0000
@@ -1709,7 +1709,8 @@
 ;; During a normal load this is a noop:
 (require 'advice-preload "advice.el")
 (require 'macroexp)
-(eval-when-compile (require 'cl-lib))
+;; At run-time also, since ad-do-advised-functions returns code that uses it.
+(require 'cl-lib)
 
 ;; @@ Variable definitions:
 ;; ========================

=== modified file 'lisp/emacs-lisp/cl-extra.el'
--- a/lisp/emacs-lisp/cl-extra.el       2012-11-03 18:36:09 +0000
+++ b/lisp/emacs-lisp/cl-extra.el       2012-11-10 23:13:33 +0000
@@ -131,7 +131,7 @@
 ;;;###autoload
 (defun cl-maplist (cl-func cl-list &rest cl-rest)
   "Map FUNCTION to each sublist of LIST or LISTs.
-Like `mapcar', except applies to lists and their cdr's rather than to
+Like `cl-mapcar', except applies to lists and their cdr's rather than to
 the elements themselves.
 \n(fn FUNCTION LIST...)"
   (if cl-rest
@@ -170,7 +170,7 @@
 
 ;;;###autoload
 (defun cl-mapcan (cl-func cl-seq &rest cl-rest)
-  "Like `mapcar', but nconc's together the values returned by the function.
+  "Like `cl-mapcar', but nconc's together the values returned by the function.
 \n(fn FUNCTION SEQUENCE...)"
   (apply 'nconc (apply 'cl-mapcar cl-func cl-seq cl-rest)))
 
@@ -675,6 +675,9 @@
 
 ;;;###autoload
 (defun cl-prettyexpand (form &optional full)
+  "Expand macros in FORM and insert the pretty-printed result.
+Optional argument FULL non-nil means to expand all macros,
+including `cl-block' and `cl-eval-when'."
   (message "Expanding...")
   (let ((cl--compiling-file full)
        (byte-compile-macro-environment nil))

=== modified file 'lisp/emacs-lisp/cl-lib.el'
--- a/lisp/emacs-lisp/cl-lib.el 2012-11-03 18:36:09 +0000
+++ b/lisp/emacs-lisp/cl-lib.el 2012-11-10 23:13:33 +0000
@@ -251,12 +251,17 @@
 (defvar cl-proclaims-deferred nil)
 
 (defun cl-proclaim (spec)
+  "Record a global declaration specified by SPEC."
   (if (fboundp 'cl-do-proclaim) (cl-do-proclaim spec t)
     (push spec cl-proclaims-deferred))
   nil)
 
 (defmacro cl-declaim (&rest specs)
-  (let ((body (mapcar (function (lambda (x) (list 'cl-proclaim (list 'quote 
x))))
+  "Like `cl-proclaim', but takes any number of unevaluated, unquoted arguments.
+Puts `(cl-eval-when (compile load eval) ...)' around the declarations
+so that they are registered at compile-time as well as run-time."
+  (let ((body (mapcar (function (lambda (x)
+                                  (list 'cl-proclaim (list 'quote x))))
                      specs)))
     (if (cl--compiling-file) (cl-list* 'cl-eval-when '(compile load eval) body)
       (cons 'progn body))))   ; avoid loading cl-macs.el for cl-eval-when

=== modified file 'lisp/emacs-lisp/cl-macs.el'
--- a/lisp/emacs-lisp/cl-macs.el        2012-11-03 18:32:09 +0000
+++ b/lisp/emacs-lisp/cl-macs.el        2012-11-05 08:29:12 +0000
@@ -554,6 +554,7 @@
 
 ;;;###autoload
 (defmacro cl-destructuring-bind (args expr &rest body)
+  "Bind the variables in ARGS to the result of EXPR and execute BODY."
   (declare (indent 2)
            (debug (&define cl-macro-list def-form cl-declarations def-body)))
   (let* ((cl--bind-lets nil) (cl--bind-forms nil) (cl--bind-inits nil)
@@ -1886,10 +1887,12 @@
 
 ;;;###autoload
 (defmacro cl-locally (&rest body)
+  "Equivalent to `progn'."
   (declare (debug t))
   (cons 'progn body))
 ;;;###autoload
 (defmacro cl-the (_type form)
+  "At present this ignores _TYPE and is simply equivalent to FORM."
   (declare (indent 1) (debug (cl-type-spec form)))
   form)
 
@@ -2537,6 +2540,10 @@
 
 ;;;###autoload
 (defun cl-compiler-macroexpand (form)
+  "Like `macroexpand', but for compiler macros.
+Expands FORM repeatedly until no further expansion is possible.
+Returns FORM unchanged if it has no compiler macro, or if it has a
+macro that returns its `&whole' argument."
   (while
       (let ((func (car-safe form)) (handler nil))
        (while (and (symbolp func)

=== modified file 'lisp/emacs-lisp/cl.el'
--- a/lisp/emacs-lisp/cl.el     2012-10-30 07:34:37 +0000
+++ b/lisp/emacs-lisp/cl.el     2012-11-07 08:56:16 +0000
@@ -547,13 +547,15 @@
 
 (defmacro define-setf-expander (name arglist &rest body)
   "Define a `setf' method.
-This method shows how to handle `setf's to places of the form (NAME ARGS...).
-The argument forms ARGS are bound according to ARGLIST, as if NAME were
-going to be expanded as a macro, then the BODY forms are executed and must
-return a list of five elements: a temporary-variables list, a value-forms
-list, a store-variables list (of length one), a store-form, and an access-
-form.  See `gv-define-expander', `gv-define-setter', and `gv-define-expander'
-for a better and simpler ways to define setf-methods."
+This method shows how to handle `setf's to places of the form
+\(NAME ARGS...).  The argument forms ARGS are bound according to
+ARGLIST, as if NAME were going to be expanded as a macro, then
+the BODY forms are executed and must return a list of five elements:
+a temporary-variables list, a value-forms list, a store-variables list
+\(of length one), a store-form, and an access- form.
+
+See `gv-define-expander', and `gv-define-setter' for better and
+simpler ways to define setf-methods."
   (declare (debug
             (&define name cl-lambda-list cl-declarations-or-string def-body)))
   `(progn
@@ -566,23 +568,31 @@
 
 (defmacro defsetf (name arg1 &rest args)
   "Define a `setf' method.
-This macro is an easy-to-use substitute for `define-setf-expander' that works
-well for simple place forms.  In the simple `defsetf' form, `setf's of
-the form (setf (NAME ARGS...) VAL) are transformed to function or macro
-calls of the form (FUNC ARGS... VAL).  Example:
+This macro is an easy-to-use substitute for `define-setf-expander'
+that works well for simple place forms.
+
+In the simple `defsetf' form, `setf's of the form (setf (NAME
+ARGS...) VAL) are transformed to function or macro calls of the
+form (FUNC ARGS... VAL).  For example:
 
   (defsetf aref aset)
 
+You can replace this form with `gv-define-simple-setter'.
+
 Alternate form: (defsetf NAME ARGLIST (STORE) BODY...).
-Here, the above `setf' call is expanded by binding the argument forms ARGS
-according to ARGLIST, binding the value form VAL to STORE, then executing
-BODY, which must return a Lisp form that does the necessary `setf' operation.
-Actually, ARGLIST and STORE may be bound to temporary variables which are
-introduced automatically to preserve proper execution order of the arguments.
-Example:
+
+Here, the above `setf' call is expanded by binding the argument
+forms ARGS according to ARGLIST, binding the value form VAL to
+STORE, then executing BODY, which must return a Lisp form that
+does the necessary `setf' operation.  Actually, ARGLIST and STORE
+may be bound to temporary variables which are introduced
+automatically to preserve proper execution order of the arguments.
+For example:
 
   (defsetf nth (n x) (v) `(setcar (nthcdr ,n ,x) ,v))
 
+You can replace this form with `gv-define-setter'.
+
 \(fn NAME [FUNC | ARGLIST (STORE) BODY...])"
   (declare (debug
             (&define name
@@ -597,7 +607,7 @@
                           (cl-function
                            (lambda (,@(car args) ,@arg1) ,@(cdr args)))
                          do args)))
-    `(gv-define-simple-setter ,name ,arg1)))
+    `(gv-define-simple-setter ,name ,arg1 ,(car args))))
 
 ;; FIXME: CL used to provide a setf method for `apply', but I haven't been able
 ;; to find a case where it worked.  The code below tries to handle it as well.
@@ -639,8 +649,12 @@
 
 (defmacro define-modify-macro (name arglist func &optional doc)
   "Define a `setf'-like modify macro.
-If NAME is called, it combines its PLACE argument with the other arguments
-from ARGLIST using FUNC: (define-modify-macro incf (&optional (n 1)) +)"
+If NAME is called, it combines its PLACE argument with the other
+arguments from ARGLIST using FUNC.  For example:
+
+  (define-modify-macro incf (&optional (n 1)) +)
+
+You can replace this macro with `gv-letplace'."
   (declare (debug
             (&define name cl-lambda-list ;; should exclude &key
                      symbolp &optional stringp)))

=== modified file 'lisp/emacs-lisp/gv.el'
--- a/lisp/emacs-lisp/gv.el     2012-11-08 14:54:03 +0000
+++ b/lisp/emacs-lisp/gv.el     2012-11-10 23:13:33 +0000
@@ -111,7 +111,7 @@
 GETTER will be bound to a copyable expression that returns the value
 of PLACE.
 SETTER will be bound to a function that takes an expression V and returns
-and new expression that sets PLACE to V.
+a new expression that sets PLACE to V.
 BODY should return some Elisp expression E manipulating PLACE via GETTER
 and SETTER.
 The returned value will then be an Elisp expression that first evaluates
@@ -194,7 +194,7 @@
 Assignments of VAL to (NAME ARGS...) are expanded by binding the argument
 forms (VAL ARGS...) according to ARGLIST, then executing BODY, which must
 return a Lisp form that does the assignment.
-The first arg in ARLIST (the one that receives VAL) receives an expression
+The first arg in ARGLIST (the one that receives VAL) receives an expression
 which can do arbitrary things, whereas the other arguments are all guaranteed
 to be pure and copyable.  Example use:
   (gv-define-setter aref (v a i) `(aset ,a ,i ,v))"
@@ -209,13 +209,20 @@
 This macro is an easy-to-use substitute for `gv-define-expander' that works
 well for simple place forms.  Assignments of VAL to (NAME ARGS...) are
 turned into calls of the form (SETTER ARGS... VAL).
+
 If FIX-RETURN is non-nil, then SETTER is not assumed to return VAL and
-instead the assignment is turned into (prog1 VAL (SETTER ARGS... VAL))
+instead the assignment is turned into something equivalent to
+  \(let ((temp VAL))
+    (SETTER ARGS... temp)
+    temp)
 so as to preserve the semantics of `setf'."
   (declare (debug (sexp (&or symbolp lambda-expr) &optional sexp)))
-  (let ((set-call `(cons ',setter (append args (list val)))))
   `(gv-define-setter ,name (val &rest args)
-     ,(if fix-return `(list 'prog1 val ,set-call) set-call))))
+     ,(if fix-return
+          `(macroexp-let2 nil v val
+             (cons ',setter (append args (list v)))
+             v)
+        `(cons ',setter (append args (list val))))))
 
 ;;; Typical operations on generalized variables.
 

=== modified file 'lisp/mail/emacsbug.el'
--- a/lisp/mail/emacsbug.el     2012-09-24 06:31:02 +0000
+++ b/lisp/mail/emacsbug.el     2012-11-08 18:35:08 +0000
@@ -517,7 +517,6 @@
                buglist))))
     (report-emacs-bug-create-existing-bugs-buffer (nreverse buglist) 
keywords)))
 
-;;;###autoload
 (defun report-emacs-bug-query-existing-bugs (keywords)
   "Query for KEYWORDS at `report-emacs-bug-tracker-url', and return the result.
 The result is an alist with items of the form (URL SUBJECT NO)."
@@ -527,6 +526,8 @@
                        (replace-regexp-in-string "[[:space:]]+" "+" keywords)
                        ";package=emacs")
                'report-emacs-bug-parse-query-results (list keywords)))
+(make-obsolete 'report-emacs-bug-query-existing-bugs
+              "use the `debbugs' package from GNU ELPA instead." "24.3")
 
 (provide 'emacsbug)
 

=== modified file 'lisp/minibuf-eldef.el'
--- a/lisp/minibuf-eldef.el     2012-09-27 02:10:54 +0000
+++ b/lisp/minibuf-eldef.el     2012-11-07 20:43:38 +0000
@@ -33,13 +33,25 @@
 
 ;;; Code:
 
-(defvar minibuffer-eldef-shorten-default nil
-  "If non-nil, shorten \"(default ...)\" to \"[...]\" in minibuffer prompts.")
+(defvar minibuffer-eldef-shorten-default)
 
-(defvar minibuffer-default-in-prompt-regexps
+(defun minibuffer-default--in-prompt-regexps ()
   `(("\\( (default\\(?: is\\)? \\(.*\\))\\):? \\'"
      1 ,(if minibuffer-eldef-shorten-default " [\\2]"))
-    ("\\( \\[.*\\]\\):? *\\'" 1))
+    ("\\( \\[.*\\]\\):? *\\'" 1)))
+
+(defcustom minibuffer-eldef-shorten-default nil
+  "If non-nil, shorten \"(default ...)\" to \"[...]\" in minibuffer prompts."
+  :set (lambda (symbol value)
+         (set-default symbol value)
+        (setq-default minibuffer-default-in-prompt-regexps
+                      (minibuffer-default--in-prompt-regexps)))
+  :type 'boolean
+  :group 'minibuffer
+  :version "24.3")
+
+(defvar minibuffer-default-in-prompt-regexps
+  (minibuffer-default--in-prompt-regexps)
   "A list of regexps matching the parts of minibuffer prompts showing defaults.
 When `minibuffer-electric-default-mode' is active, these regexps are
 used to identify the portions of prompts to elide.

=== modified file 'lisp/server.el'
--- a/lisp/server.el    2012-10-07 22:31:58 +0000
+++ b/lisp/server.el    2012-11-09 06:28:27 +0000
@@ -842,6 +842,15 @@
     (unless (assq w window-system-initialization-alist)
       (setq w nil))
 
+    ;; Special case for ns.  This is because DISPLAY may not be set at all
+    ;; which in the ns case isn't an error.  The variable display then becomes
+    ;; the fully qualified hostname, which make-frame-on-display below
+    ;; does not understand and throws an error.
+    ;; It may also be a valid X display, but if Emacs is compiled for ns, it
+    ;; can not make X frames.
+    (if (featurep 'ns-win)
+       (setq w 'ns display "ns"))
+
     (cond (w
            ;; Flag frame as client-created, but use a dummy client.
            ;; This will prevent the frame from being deleted when

=== modified file 'lisp/term.el'
--- a/lisp/term.el      2012-09-27 07:05:37 +0000
+++ b/lisp/term.el      2012-11-10 01:48:44 +0000
@@ -452,7 +452,7 @@
   "A queue of strings whose echo we want suppressed.")
 (defvar term-terminal-parameter)
 (defvar term-terminal-previous-parameter)
-(defvar term-current-face 'term-face)
+(defvar term-current-face 'term)
 (defvar term-scroll-start 0 "Top-most line (inclusive) of scrolling region.")
 (defvar term-scroll-end) ; Number of line (zero-based) after scrolling region.
 (defvar term-pager-count nil
@@ -759,7 +759,7 @@
 
 ;;; Faces
 (defvar ansi-term-color-vector
-  [term-face
+  [term
    term-color-black
    term-color-red
    term-color-green
@@ -770,18 +770,20 @@
    term-color-white])
 
 (defcustom term-default-fg-color nil
-  "If non-nil, default color for foreground in Term mode.
-This is deprecated in favor of customizing the `term-face' face."
+  "If non-nil, default color for foreground in Term mode."
   :group 'term
   :type 'string)
+(make-obsolete-variable 'term-default-fg-color "use the face `term' instead."
+                        "24.3")
 
 (defcustom term-default-bg-color nil
-  "If non-nil, default color for foreground in Term mode.
-This is deprecated in favor of customizing the `term-face' face."
+  "If non-nil, default color for foreground in Term mode."
   :group 'term
   :type 'string)
+(make-obsolete-variable 'term-default-bg-color "use the face `term' instead."
+                        "24.3")
 
-(defface term-face
+(defface term
   `((t
      :foreground ,term-default-fg-color
      :background ,term-default-bg-color
@@ -988,7 +990,7 @@
     dt))
 
 (defun term-ansi-reset ()
-  (setq term-current-face 'term-face)
+  (setq term-current-face 'term)
   (setq term-ansi-current-underline nil)
   (setq term-ansi-current-bold nil)
   (setq term-ansi-current-reverse nil)

=== modified file 'lisp/vc/diff-mode.el'
--- a/lisp/vc/diff-mode.el      2012-10-29 15:14:10 +0000
+++ b/lisp/vc/diff-mode.el      2012-11-08 17:31:53 +0000
@@ -178,7 +178,7 @@
     ["Unified -> Context"      diff-unified->context
      :help "Convert unified diffs to context diffs"]
     ;;["Fixup Headers"         diff-fixup-modifs       (not buffer-read-only)]
-    ["Remove trailing whitespace" diff-remove-trailing-whitespace
+    ["Remove trailing whitespace" diff-delete-trailing-whitespace
      :help "Remove trailing whitespace problems introduced by the diff"]
     ["Show trailing whitespace" whitespace-mode
      :style toggle :selected (bound-and-true-p whitespace-mode)
@@ -2048,35 +2048,71 @@
       ;; When there's no more hunks, diff-hunk-next signals an error.
       (error nil))))
 
-(defun diff-remove-trailing-whitespace ()
-  "When on a buffer that contains a diff, inspects the
-differences and removes trailing whitespace (spaces, tabs) from
-the lines modified or introduced by this diff. Shows a message
-with the name of the altered buffers, which are unsaved.  If a
-file referenced on the diff has no buffer and needs to be fixed,
-a buffer visiting that file is created."
-  (interactive)
-  ;; We assume that the diff header has no trailing whitespace.
-  (let ((modified-buffers nil))
-    (save-excursion
-      (goto-char (point-min))
-      (while (re-search-forward "^[+!>].*[ \t]+$" (point-max) t)
-        (pcase-let ((`(,buf ,line-offset ,pos ,src ,_dst ,_switched)
-                     (diff-find-source-location t t)))
-          (when line-offset
-            (with-current-buffer buf
-              (save-excursion
-                (goto-char (+ (car pos) (cdr src)))
-                (beginning-of-line)
-                (when (re-search-forward "\\([ \t]+\\)$" (line-end-position) t)
-                  (unless (memq buf modified-buffers)
-                    (push buf modified-buffers))
-                  (replace-match ""))))))))
-    (if modified-buffers
-        (message "Deleted new trailing whitespace from: %s"
-                 (mapconcat (lambda (buf) (concat "`" (buffer-name buf) "'"))
-                            modified-buffers " "))
-      (message "No trailing whitespace fixes needed."))))
+(defun diff-delete-trailing-whitespace (&optional other-file)
+  "Remove trailing whitespace from lines modified in this diff.
+This edits both the current Diff mode buffer and the patched
+source file(s).  If `diff-jump-to-old-file' is non-nil, edit the
+original (unpatched) source file instead.  With a prefix argument
+OTHER-FILE, flip the choice of which source file to edit.
+
+If a file referenced in the diff has no buffer and needs to be
+fixed, visit it in a buffer."
+  (interactive "P")
+  (save-excursion
+    (goto-char (point-min))
+    (let* ((other (diff-xor other-file diff-jump-to-old-file))
+          (modified-buffers nil)
+          (style (save-excursion
+                   (when (re-search-forward diff-hunk-header-re nil t)
+                     (goto-char (match-beginning 0))
+                     (diff-hunk-style))))
+          (regexp (concat "^[" (if other "-<" "+>") "!]"
+                          (if (eq style 'context) " " "")
+                          ".*?\\([ \t]+\\)$"))
+          (inhibit-read-only t)
+          (end-marker (make-marker))
+          hunk-end)
+      ;; Move to the first hunk.
+      (re-search-forward diff-hunk-header-re nil 1)
+      (while (progn (save-excursion
+                     (re-search-forward diff-hunk-header-re nil 1)
+                     (setq hunk-end (point)))
+                   (< (point) hunk-end))
+       ;; For context diffs, search only in the appropriate half of
+       ;; the hunk.  For other diffs, search within the entire hunk.
+       (if (not (eq style 'context))
+           (set-marker end-marker hunk-end)
+         (let ((mid-hunk
+                (save-excursion
+                  (re-search-forward diff-context-mid-hunk-header-re hunk-end)
+                  (point))))
+           (if other
+               (set-marker end-marker mid-hunk)
+             (goto-char mid-hunk)
+             (set-marker end-marker hunk-end))))
+       (while (re-search-forward regexp end-marker t)
+         (let ((match-data (match-data)))
+           (pcase-let ((`(,buf ,line-offset ,pos ,src ,_dst ,_switched)
+                        (diff-find-source-location other-file)))
+             (when line-offset
+               ;; Remove the whitespace in the Diff mode buffer.
+               (set-match-data match-data)
+               (replace-match "" t t nil 1)
+               ;; Remove the whitespace in the source buffer.
+               (with-current-buffer buf
+                 (save-excursion
+                   (goto-char (+ (car pos) (cdr src)))
+                   (beginning-of-line)
+                   (when (re-search-forward "\\([ \t]+\\)$" 
(line-end-position) t)
+                     (unless (memq buf modified-buffers)
+                       (push buf modified-buffers))
+                     (replace-match ""))))))))
+       (goto-char hunk-end))
+      (if modified-buffers
+         (message "Deleted trailing whitespace from %s."
+                  (mapconcat (lambda (buf) (concat "`" (buffer-name buf) "'"))
+                             modified-buffers ", "))
+       (message "No trailing whitespace to delete.")))))
 
 ;; provide the package
 (provide 'diff-mode)

=== modified file 'lisp/woman.el'
--- a/lisp/woman.el     2012-10-29 10:30:11 +0000
+++ b/lisp/woman.el     2012-11-06 01:49:44 +0000
@@ -2253,7 +2253,9 @@
         (set-face-font 'woman-symbol woman-symbol-font
                        (and (frame-live-p woman-frame) woman-frame)))
 
-    ;; Set syntax and display tables:
+    (setq-local adaptive-fill-mode nil) ; No special "%" "#" etc filling.
+
+        ;; Set syntax and display tables:
     (set-syntax-table woman-syntax-table)
     (woman-set-buffer-display-table)
 

=== modified file 'src/ChangeLog'
--- a/src/ChangeLog     2012-11-09 22:20:47 +0000
+++ b/src/ChangeLog     2012-11-10 23:13:33 +0000
@@ -1,3 +1,24 @@
+2012-11-10  Martin Rudalics  <address@hidden>
+
+       * window.c (Fsplit_window_internal): Set combination limit of
+       new parent window to t iff Vwindow_combination_limit is t;
+       fixing a regression introduced with the change from 2012-09-22.
+       (Fset_window_combination_limit): Fix doc-string.
+
+2012-11-10  Eli Zaretskii  <address@hidden>
+
+       * xdisp.c (try_scrolling): Fix correction of aggressive-scroll
+       amount when the scroll margins are too large.  When scrolling
+       backwards in the buffer, give up if cannot reach point or the
+       scroll margin within a reasonable number of screen lines.  Fixes
+       point position in window under scroll-up/down-aggressively when
+       point is positioned many lines beyond the window top/bottom.
+       (Bug#12811)
+
+       * ralloc.c (relinquish): If real_morecore fails to return memory
+       to the system, don't crash; instead, leave the last heap
+       unchanged and return.  (Bug#12774)
+
 2012-11-09  Stefan Monnier  <address@hidden>
 
        * lisp.h (AUTOLOADP): New macro.

=== modified file 'src/ralloc.c'
--- a/src/ralloc.c      2012-10-07 18:33:10 +0000
+++ b/src/ralloc.c      2012-11-05 17:23:25 +0000
@@ -327,6 +327,8 @@
 
       if ((char *)last_heap->end - (char *)last_heap->bloc_start <= excess)
        {
+         heap_ptr lh_prev;
+
          /* This heap should have no blocs in it.  If it does, we
             cannot return it to the system.  */
          if (last_heap->first_bloc != NIL_BLOC
@@ -335,28 +337,26 @@
 
          /* Return the last heap, with its header, to the system.  */
          excess = (char *)last_heap->end - (char *)last_heap->start;
-         last_heap = last_heap->prev;
-         last_heap->next = NIL_HEAP;
+         lh_prev = last_heap->prev;
+         /* If the system doesn't want that much memory back, leave
+            last_heap unaltered to reflect that.  This can occur if
+            break_value is still within the original data segment.  */
+         if ((*real_morecore) (- excess) != 0)
+           {
+             last_heap = lh_prev;
+             last_heap->next = NIL_HEAP;
+           }
        }
       else
        {
          excess = (char *) last_heap->end
                        - (char *) ROUNDUP ((char *)last_heap->end - excess);
-         last_heap->end = (char *) last_heap->end - excess;
-       }
-
-      if ((*real_morecore) (- excess) == 0)
-       {
-         /* If the system didn't want that much memory back, adjust
-             the end of the last heap to reflect that.  This can occur
-             if break_value is still within the original data segment.  */
-         last_heap->end = (char *) last_heap->end + excess;
-         /* Make sure that the result of the adjustment is accurate.
-             It should be, for the else clause above; the other case,
-             which returns the entire last heap to the system, seems
-             unlikely to trigger this mode of failure.  */
-         if (last_heap->end != (*real_morecore) (0))
-           emacs_abort ();
+         /* If the system doesn't want that much memory back, leave
+            the end of the last heap unchanged to reflect that.  This
+            can occur if break_value is still within the original
+            data segment.  */
+         if ((*real_morecore) (- excess) != 0)
+           last_heap->end = (char *) last_heap->end - excess;
        }
     }
 }

=== modified file 'src/window.c'
--- a/src/window.c      2012-11-06 17:40:07 +0000
+++ b/src/window.c      2012-11-10 23:13:33 +0000
@@ -618,11 +618,13 @@
 
 DEFUN ("set-window-combination-limit", Fset_window_combination_limit, 
Sset_window_combination_limit, 2, 2, 0,
        doc: /* Set combination limit of window WINDOW to LIMIT; return LIMIT.
-WINDOW must be a valid window and defaults to the selected one.
 If LIMIT is nil, child windows of WINDOW can be recombined with WINDOW's
 siblings.  LIMIT t means that child windows of WINDOW are never
 \(re-)combined with WINDOW's siblings.  Other values are reserved for
-future use.  */)
+future use.
+
+WINDOW must be a valid window.  Setting the combination limit is
+meaningful for internal windows only.  */)
   (Lisp_Object window, Lisp_Object limit)
 {
   wset_combination_limit (decode_valid_window (window), limit);
@@ -3869,9 +3871,10 @@
 
       make_parent_window (old, horflag);
       p = XWINDOW (o->parent);
-      /* Store t in the new parent's combination_limit slot to avoid
-       that its children get merged into another window.  */
-      wset_combination_limit (p, Qt);
+      if (EQ (Vwindow_combination_limit, Qt))
+       /* Store t in the new parent's combination_limit slot to avoid
+          that its children get merged into another window.  */
+       wset_combination_limit (p, Qt);
       /* These get applied below.  */
       wset_new_total (p, horflag ? o->total_cols : o->total_lines);
       wset_new_normal (p, new_normal);

=== modified file 'src/xdisp.c'
--- a/src/xdisp.c       2012-11-06 13:26:20 +0000
+++ b/src/xdisp.c       2012-11-10 23:13:33 +0000
@@ -14786,13 +14786,18 @@
          if (NUMBERP (aggressive))
            {
              double float_amount = XFLOATINT (aggressive) * height;
-             amount_to_scroll = float_amount;
-             if (amount_to_scroll == 0 && float_amount > 0)
-               amount_to_scroll = 1;
+             int aggressive_scroll = float_amount;
+             if (aggressive_scroll == 0 && float_amount > 0)
+               aggressive_scroll = 1;
              /* Don't let point enter the scroll margin near top of
-                the window.  */
-             if (amount_to_scroll > height - 2*this_scroll_margin + dy)
-               amount_to_scroll = height - 2*this_scroll_margin + dy;
+                the window.  This could happen if the value of
+                scroll_up_aggressively is too large and there are
+                non-zero margins, because scroll_up_aggressively
+                means put point that fraction of window height
+                _from_the_bottom_margin_.  */
+             if (aggressive_scroll + 2*this_scroll_margin > height)
+               aggressive_scroll = height - 2*this_scroll_margin;
+             amount_to_scroll = dy + aggressive_scroll;
            }
        }
 
@@ -14852,7 +14857,8 @@
          /* Compute the vertical distance from PT to the scroll
             margin position.  Move as far as scroll_max allows, or
             one screenful, or 10 screen lines, whichever is largest.
-            Give up if distance is greater than scroll_max.  */
+            Give up if distance is greater than scroll_max or if we
+            didn't reach the scroll margin position.  */
          SET_TEXT_POS (pos, PT, PT_BYTE);
          start_display (&it, w, pos);
          y0 = it.current_y;
@@ -14862,7 +14868,8 @@
                      y_to_move, -1,
                      MOVE_TO_POS | MOVE_TO_X | MOVE_TO_Y);
          dy = it.current_y - y0;
-         if (dy > scroll_max)
+         if (dy > scroll_max
+             || IT_CHARPOS (it) < CHARPOS (scroll_margin_pos))
            return SCROLLING_FAILED;
 
          /* Compute new window start.  */
@@ -14880,15 +14887,16 @@
              if (NUMBERP (aggressive))
                {
                  double float_amount = XFLOATINT (aggressive) * height;
-                 amount_to_scroll = float_amount;
-                 if (amount_to_scroll == 0 && float_amount > 0)
-                   amount_to_scroll = 1;
-                 amount_to_scroll -=
-                   this_scroll_margin - dy - FRAME_LINE_HEIGHT (f);
+                 int aggressive_scroll = float_amount;
+                 if (aggressive_scroll == 0 && float_amount > 0)
+                   aggressive_scroll = 1;
                  /* Don't let point enter the scroll margin near
-                    bottom of the window.  */
-                 if (amount_to_scroll > height - 2*this_scroll_margin + dy)
-                   amount_to_scroll = height - 2*this_scroll_margin + dy;
+                    bottom of the window, if the value of
+                    scroll_down_aggressively happens to be too
+                    large.  */
+                 if (aggressive_scroll + 2*this_scroll_margin > height)
+                   aggressive_scroll = height - 2*this_scroll_margin;
+                 amount_to_scroll = dy + aggressive_scroll;
                }
            }
 


reply via email to

[Prev in Thread] Current Thread [Next in Thread]