emacs-diffs
[Top][All Lists]
Advanced

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

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


From: Glenn Morris
Subject: [Emacs-diffs] /srv/bzr/emacs/trunk r110995: Merge from emacs-24; up to r110946
Date: Fri, 23 Nov 2012 17:57:09 -0800
User-agent: Bazaar (2.5.0)

------------------------------------------------------------
revno: 110995 [merge]
committer: Glenn Morris <address@hidden>
branch nick: trunk
timestamp: Fri 2012-11-23 17:57:09 -0800
message:
  Merge from emacs-24; up to r110946
modified:
  doc/lispref/ChangeLog
  doc/lispref/buffers.texi
  doc/lispref/debugging.texi
  doc/lispref/modes.texi
  doc/lispref/windows.texi
  lisp/ChangeLog
  lisp/dired.el
  lisp/emacs-lisp/bytecomp.el
  lisp/faces.el
  lisp/image-mode.el
  lisp/progmodes/cc-defs.el
  lisp/progmodes/cc-engine.el
  lisp/progmodes/cc-mode.el
  lisp/wdired.el
  src/.gdbinit
  src/ChangeLog
  src/indent.c
  src/xdisp.c
=== modified file 'doc/lispref/ChangeLog'
--- a/doc/lispref/ChangeLog     2012-11-21 08:39:08 +0000
+++ b/doc/lispref/ChangeLog     2012-11-24 01:57:09 +0000
@@ -1,3 +1,30 @@
+2012-11-24  Martin Rudalics  <address@hidden>
+
+       * windows.texi (Basic Windows): Fix typo.
+       (Windows and Frames): Fix example.  Move description of
+       window-in-direction here.
+       (Recombining Windows): Fix example.
+       (Buffers and Windows): Fix description of
+       replace-buffer-in-windows.
+       (Switching Buffers): Reword.
+       (Display Action Functions): Minor adjustments.
+       (Choosing Window Options): Minor fixes.
+       (Window History): Minor rewording.
+       (Dedicated Windows): Correct and reword part describing how
+       dedicatedness affects functions removing buffers or windows.
+       * buffers.texi (The Buffer List): Fix description of
+       bury-buffer.
+
+2012-11-24  Chong Yidong  <address@hidden>
+
+       * modes.texi (%-Constructs): Fix statement about mode construct
+       padding (Bug#12866).
+
+2012-11-24  Stefan Monnier  <address@hidden>
+
+       * debugging.texi (Profiling): Make it more clear
+       that --enable-profiling is about profiling the C code.
+
 2012-11-21  Glenn Morris  <address@hidden>
 
        * display.texi (Attribute Functions):

=== modified file 'doc/lispref/buffers.texi'
--- a/doc/lispref/buffers.texi  2012-10-24 05:12:23 +0000
+++ b/doc/lispref/buffers.texi  2012-11-23 14:39:07 +0000
@@ -886,7 +886,7 @@
 @code{other-buffer} to return.  The argument can be either a buffer
 itself or the name of one.
 
-This functions operates on each frame's @code{buffer-list} parameter as
+This function operates on each frame's @code{buffer-list} parameter as
 well as the fundamental buffer list; therefore, the buffer that you bury
 will come last in the value of @code{(buffer-list @var{frame})} and in
 the value of @code{(buffer-list)}.  In addition, it also puts the buffer
@@ -896,15 +896,15 @@
 If @var{buffer-or-name} is @code{nil} or omitted, this means to bury the
 current buffer.  In addition, if the current buffer is displayed in the
 selected window, this makes sure that the window is either deleted or
-another buffer is shown in it.  More precisely, if the window is
-dedicated (@pxref{Dedicated Windows}) and there are other windows on its
-frame, the window is deleted.  If the window is both dedicated and the
-only window on its frame's terminal, the function specified by
address@hidden (@pxref{Quitting Windows}) will deal
-with the window.  If the window is not dedicated to its buffer, it calls
address@hidden (@pxref{Window History}) to show another
-buffer in that window.  If @var{buffer-or-name} is displayed in some
-other window, it remains displayed there.
+another buffer is shown in it.  More precisely, if the selected window
+is dedicated (@pxref{Dedicated Windows}) and there are other windows on
+its frame, the window is deleted.  If it is the only window on its frame
+and that frame is not the only frame on its terminal, the frame is
+``dismissed'' by calling the function specified by
address@hidden (@pxref{Quitting Windows}).  Otherwise,
+it calls @code{switch-to-prev-buffer} (@pxref{Window History}) to show
+another buffer in that window.  If @var{buffer-or-name} is displayed in
+some other window, it remains displayed there.
 
 To replace a buffer in all the windows that display it, use
 @code{replace-buffer-in-windows}, @xref{Buffers and Windows}.

=== modified file 'doc/lispref/debugging.texi'
--- a/doc/lispref/debugging.texi        2012-11-21 01:52:03 +0000
+++ b/doc/lispref/debugging.texi        2012-11-21 14:14:42 +0000
@@ -866,7 +866,7 @@
 @c Not worth putting in the printed manual.
 @ifnottex
 @cindex --enable-profiling option of configure
-For low-level profiling of Emacs itself, you can build it using the
+To profile Emacs at the level of its C code, you can build it using the
 @option{--enable-profiling} option of @command{configure}.  When Emacs
 exits, it generates a file @file{gmon.out} that you can examine using
 the @command{gprof} utility.  This feature is mainly useful for

=== modified file 'doc/lispref/modes.texi'
--- a/doc/lispref/modes.texi    2012-10-31 20:56:55 +0000
+++ b/doc/lispref/modes.texi    2012-11-23 08:32:43 +0000
@@ -2086,11 +2086,16 @@
 @subsection @code{%}-Constructs in the Mode Line
 
   Strings used as mode line constructs can use certain
address@hidden to substitute various kinds of data.  Here is a
-list of the defined @code{%}-constructs, and what they mean.  In any
-construct except @samp{%%}, you can add a decimal integer after the
address@hidden to specify a minimum field width.  If the width is less, the
-field is padded with spaces to the right.
address@hidden to substitute various kinds of data.  The
+following is a list of the defined @code{%}-constructs, and what they
+mean.
+
+  In any construct except @samp{%%}, you can add a decimal integer
+after the @samp{%} to specify a minimum field width.  If the width is
+less, the field is padded to that width.  Purely numeric constructs
+(@samp{c}, @samp{i}, @samp{I}, and @samp{l}) are padded by inserting
+spaces to the left, and others are padded by inserting spaces to the
+right.
 
 @table @code
 @item %b

=== modified file 'doc/lispref/windows.texi'
--- a/doc/lispref/windows.texi  2012-11-21 04:47:55 +0000
+++ b/doc/lispref/windows.texi  2012-11-24 01:57:09 +0000
@@ -51,9 +51,9 @@
 @section Basic Concepts of Emacs Windows
 @cindex window
 
-A @dfn{window} is a area of the screen that is used to display a
-buffer (@pxref{Buffers}).  In Emacs Lisp, windows are represented by a
-special Lisp object type.
+A @dfn{window} is an area of the screen that is used to display a buffer
+(@pxref{Buffers}).  In Emacs Lisp, windows are represented by a special
+Lisp object type.
 
 @cindex multiple windows
   Windows are grouped into frames (@pxref{Frames}).  Each frame
@@ -247,12 +247,12 @@
 @end smallexample
 
 @noindent
-The root window of this frame is an internal window, @code{W1}.  Its
+The root window of this frame is an internal window, @var{W1}.  Its
 child windows form a horizontal combination, consisting of the live
-window @code{W2} and the internal window @code{W3}.  The child windows
-of @code{W3} form a vertical combination, consisting of the live
-windows @code{W4} and @code{W5}.  Hence, the live windows in this
-window tree are @code{W2} @code{W4}, and @code{W5}.
+window @var{W2} and the internal window @var{W3}.  The child windows
+of @var{W3} form a vertical combination, consisting of the live
+windows @var{W4} and @var{W5}.  Hence, the live windows in this
+window tree are @var{W2} @var{W4}, and @var{W5}.
 
   The following functions can be used to retrieve a child window of an
 internal window, and the siblings of a child window.
@@ -308,8 +308,8 @@
 and previous window, respectively, in the cyclic ordering of windows
 (@pxref{Cyclic Window Ordering}).
 
-  You can use the following functions to find the first live window on
-a frame, and to retrieve the entire window tree of a frame:
+  You can use the following functions to find the first live window on a
+frame and the window nearest to a given window.
 
 @defun frame-first-window &optional frame-or-window
 This function returns the live window at the upper left corner of the
@@ -318,8 +318,31 @@
 to the selected frame.  If @var{frame-or-window} specifies a window,
 this function returns the first window on that window's frame.  Under
 the assumption that the frame from our canonical example is selected
address@hidden(frame-first-window)} returns @code{W2}.
address@hidden defun
address@hidden(frame-first-window)} returns @var{W2}.
address@hidden defun
+
address@hidden window in direction
address@hidden window-in-direction direction &optional window ignore
+This function returns the nearest live window in direction
address@hidden as seen from the position of @code{window-point} in
+window @var{window}.  The argument @var{direction} must be one of
address@hidden, @code{below}, @code{left} or @code{right}.  The optional
+argument @var{window} must denote a live window and defaults to the
+selected one.
+
+This function does not return a window whose @code{no-other-window}
+parameter is address@hidden (@pxref{Window Parameters}).  If the nearest
+window's @code{no-other-window} parameter is address@hidden, this
+function tries to find another window in the indicated direction whose
address@hidden parameter is @code{nil}.  If the optional
+argument @var{ignore} is address@hidden, a window may be returned even
+if its @code{no-other-window} parameter is address@hidden
+
+If it doesn't find a suitable window, this function returns @code{nil}.
address@hidden defun
+
+The following function allows to retrieve the entire window tree of a
+frame:
 
 @defun window-tree &optional frame
 This function returns a list representing the window tree for frame
@@ -925,9 +948,9 @@
 @node Recombining Windows
 @section 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
+When deleting the last sibling of a window @var{W}, its parent window
+is deleted too, with @var{W} replacing it in the window tree.  This
+means that @var{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.
@@ -952,20 +975,20 @@
 @end smallexample
 
 @noindent
-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}.
+Deleting @var{W5} in this configuration normally causes the deletion of
address@hidden and @var{W4}.  The remaining live windows @var{W2},
address@hidden and @var{W7} are recombined to form a new horizontal
+combination with parent @var{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
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}.
+   Consider a scenario starting with two live windows @var{W2} and
address@hidden and their parent @var{W1}.
 
 @smallexample
 @group
@@ -988,7 +1011,7 @@
 @end smallexample
 
 @noindent
-Split @code{W2} to make a new window @code{W4} as follows.
+Split @var{W2} to make a new window @var{W4} as follows.
 
 @smallexample
 @group
@@ -1013,8 +1036,8 @@
 @noindent
 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
+exists.  In our scenario, enlarging @var{W4} will steal space from
address@hidden
 
 @smallexample
 @group
@@ -1037,8 +1060,8 @@
 @end smallexample
 
 @noindent
-Deleting @code{W4} will now give its entire space to @code{W2},
-including the space earlier stolen from @code{W3}.
+Deleting @var{W4} will now give its entire space to @var{W2},
+including the space earlier stolen from @var{W3}.
 
 @smallexample
 @group
@@ -1061,12 +1084,12 @@
 @end smallexample
 
 @noindent
-This can be counterintuitive, in particular if @code{W4} were used for
+This can be counterintuitive, in particular if @var{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  The variable described next allows to do that.
 
 @defopt window-combination-limit
 This variable controls whether splitting a window shall make a new
@@ -1108,7 +1131,7 @@
 the child windows are deleted (see below).
 @end defopt
 
-  If @code{window-combination-limit} is @code{t}, splitting @code{W2} in
+  If @code{window-combination-limit} is @code{t}, splitting @var{W2} in
 the initial configuration of our scenario would have produced this:
 
 @smallexample
@@ -1132,12 +1155,12 @@
 @end smallexample
 
 @noindent
-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}
+A new internal window @var{W5} has been created; its children are
address@hidden and the new live window @var{W4}.  Now, @var{W2} is the only
+sibling of @var{W4}, so enlarging @var{W4} will try to shrink
address@hidden, leaving @var{W3} unaffected.  Observe that @var{W5}
 represents a vertical combination of two windows embedded in the
-vertical combination @code{W1}.
+vertical combination @var{W1}.
 
 @cindex window combination limit
 @defun set-window-combination-limit window limit
@@ -1162,9 +1185,9 @@
 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.
+combination limit of @var{W4} (the parent window of @var{W6} and
address@hidden) is @code{t}, deleting @var{W5} will not implicitly delete
address@hidden too.
 @end defun
 
 Alternatively, the problems sketched above can be avoided by always
@@ -1215,7 +1238,7 @@
 
 @noindent
 If @code{window-combination-resize} is @code{nil}, splitting window
address@hidden leaves the size of @code{W2} unchanged:
address@hidden leaves the size of @var{W2} unchanged:
 
 @smallexample
 @group
@@ -1238,7 +1261,7 @@
 @end smallexample
 
 @noindent
-If @code{window-combination-resize} is @code{t}, splitting @code{W3}
+If @code{window-combination-resize} is @code{t}, splitting @var{W3}
 instead leaves all three live windows with approximately the same
 height:
 
@@ -1263,7 +1286,7 @@
 @end smallexample
 
 @noindent
-Deleting any of the live windows @code{W2}, @code{W3} or @code{W4} will
+Deleting any of the live windows @var{W2}, @var{W3} or @var{W4} will
 distribute its space proportionally among the two remaining live
 windows.
 
@@ -1510,25 +1533,6 @@
 @code{next-window}.
 @end defun
 
address@hidden window in direction
address@hidden window-in-direction direction &optional window ignore
-This function returns the nearest window in direction @var{direction} as
-seen from the position of @code{window-point} in window @var{window}.
-The argument @var{direction} must be one of @code{above}, @code{below},
address@hidden or @code{right}.  The optional argument @var{window} must
-denote a live window and defaults to the selected one.
-
-This function does not return a window whose @code{no-other-window}
-parameter is address@hidden  If the nearest window's
address@hidden parameter is address@hidden, this function tries
-to find another window in the indicated direction whose
address@hidden parameter is @code{nil}.  If the optional
-argument @var{ignore} is address@hidden, a window may be returned even
-if its @code{no-other-window} parameter is address@hidden
-
-If it doesn't find a suitable window, this function returns @code{nil}.
address@hidden defun
-
 
 @node Buffers and Windows
 @section Buffers and Windows
@@ -1631,28 +1635,30 @@
 
 @deffn Command replace-buffer-in-windows &optional buffer-or-name
 This command replaces @var{buffer-or-name} with some other buffer, in
-all windows displaying it.  @var{buffer-or-name} should be a buffer,
-or the name of an existing buffer; if omitted or @code{nil}, it
-defaults to the current buffer.
+all windows displaying it.  @var{buffer-or-name} should be a buffer, or
+the name of an existing buffer; if omitted or @code{nil}, it defaults to
+the current buffer.
 
 The replacement buffer in each window is chosen via
 @code{switch-to-prev-buffer} (@pxref{Window History}).  Any dedicated
-window displaying @var{buffer-or-name} is deleted (@pxref{Dedicated
-Windows}), unless it is the only window on its frame---if it is the
-only window, and that frame is not the only frame on its terminal, the
-frame is ``dismissed'' by calling the function specified by
address@hidden (@pxref{Quitting Windows}).  If the
-dedicated window is the only window on the only frame on its terminal,
-the buffer is replaced anyway.
+window displaying @var{buffer-or-name} is deleted if possible
+(@pxref{Dedicated Windows}).  If such a window is the only window on its
+frame and there are other frames on the same terminal, the frame is
+deleted as well.  If the dedicated window is the only window on the only
+frame on its terminal, the buffer is replaced anyway.
 @end deffn
 
+
 @node Switching Buffers
 @section Switching to a Buffer in a Window
 @cindex switching to a buffer
 @cindex displaying a buffer
 
-  This section describes high-level functions for switching to a
-specified buffer in some window.
+This section describes high-level functions for switching to a specified
+buffer in some window.  In general, ``switching to a buffer'' means to
+(1) show the buffer in some window, (2) make that window the selected
+window (and its frame the selected frame), and (3) make the buffer the
+current buffer.
 
   Do @emph{not} use these functions to make a buffer temporarily
 current just so a Lisp program can access or modify it.  They have
@@ -1664,9 +1670,9 @@
 
 @deffn Command switch-to-buffer buffer-or-name &optional norecord 
force-same-window
 This command attempts to display @var{buffer-or-name} in the selected
-window, and makes it the current buffer.  It is often used
-interactively (as the binding of @kbd{C-x b}), as well as in Lisp
-programs.  The return value is the buffer switched to.
+window and make it the current buffer.  It is often used interactively
+(as the binding of @kbd{C-x b}), as well as in Lisp programs.  The
+return value is the buffer switched to.
 
 If @var{buffer-or-name} is @code{nil}, it defaults to the buffer
 returned by @code{other-buffer} (@pxref{The Buffer List}).  If
@@ -1690,9 +1696,8 @@
 instead.
 @end deffn
 
-By default, @code{switch-to-buffer} sets @code{window-point} of the
-window used to the buffer's position of @code{point}.  This behavior can
-be tuned using the following option.
+By default, @code{switch-to-buffer} shows the buffer at its position of
address@hidden  This behavior can be tuned using the following option.
 
 @defopt switch-to-buffer-preserve-window-point
 If this variable is @code{nil}, @code{switch-to-buffer} displays the
@@ -1710,13 +1715,13 @@
 buffer.
 @end defopt
 
-The next two functions are similar to @code{switch-to-buffer}, except
-for the described features.
+The next two commands are similar to @code{switch-to-buffer}, except for
+the described features.
 
 @deffn Command switch-to-buffer-other-window buffer-or-name &optional norecord
-This function makes the buffer specified by @var{buffer-or-name}
-current and displays it in some window other than the selected window.
-It uses the function @code{pop-to-buffer} internally (see below).
+This function displays the buffer specified by @var{buffer-or-name} in
+some window other than the selected window.  It uses the function
address@hidden internally (see below).
 
 If the selected window already displays the specified buffer, it
 continues to do so, but another window is nonetheless found to display
@@ -1727,9 +1732,9 @@
 @end deffn
 
 @deffn Command switch-to-buffer-other-frame buffer-or-name &optional norecord
-This function makes the buffer specified by @var{buffer-or-name}
-current and displays it, usually in a new frame.  It uses the function
address@hidden (see below).
+This function displays the buffer specified by @var{buffer-or-name} in a
+new frame.  It uses the function @code{pop-to-buffer} internally (see
+below).
 
 If the specified buffer is already displayed in another window, in any
 frame on the current terminal, this switches to that window instead of
@@ -1987,8 +1992,8 @@
 @end itemize
 
 This function can fail if no window splitting can be performed for some
-reason (e.g. if there is just one frame and it has an
address@hidden frame parameter; @pxref{Buffer Parameters}).
+reason (e.g. if the selected frame has an @code{unsplittable} frame
+parameter; @pxref{Buffer Parameters}).
 @end defun
 
 @defun display-buffer-below-selected buffer alist
@@ -2035,14 +2040,15 @@
 
 @noindent
 Evaluating the form above will cause @code{display-buffer} to proceed as
-follows: If `*foo*' already appears on a visible or iconified frame, it
-will reuse its window.  Otherwise, it will try to pop up a new window
-or, if that is impossible, a new frame.  If all these steps fail, it
-will proceed using whatever @code{display-buffer-base-action} and
+follows: If a buffer called *foo* already appears on a visible or
+iconified frame, it will reuse its window.  Otherwise, it will try to
+pop up a new window or, if that is impossible, a new frame and show the
+buffer there.  If all these steps fail, it will proceed using whatever
address@hidden and
 @code{display-buffer-fallback-action} prescribe.
 
    Furthermore, @code{display-buffer} will try to adjust a reused window
-(provided `*foo*' was put by @code{display-buffer} there before) or a
+(provided *foo* was put by @code{display-buffer} there before) or a
 popped-up window as follows: If the window is part of a vertical
 combination, it will set its height to ten lines.  Note that if, instead
 of the number ``10'', we specified the function
@@ -2077,10 +2083,10 @@
 @end example
 
 @noindent
-Evaluating this form will cause @code{display-buffer} to first try
-reusing a window showing @code{*foo*} on the selected frame.
-If no such window exists, it will try to split the selected window or,
-if that is impossible, use the window below the selected window.
+This form will have @code{display-buffer} first try reusing a window
+that shows *foo* on the selected frame.  If there's no such window, it
+will try to split the selected window or, if that is impossible, use the
+window below the selected window.
 
    If there's no window below the selected one, or the window below the
 selected one is dedicated to its buffer, @code{display-buffer} will
@@ -2119,8 +2125,8 @@
 the window (@pxref{Display Action Functions}).
 
 The default value is @code{split-window-sensibly}, which is documented
-below.  The value must be a function that takes one argument, a
-window, and return either a new window (which is used to display the
+below.  The value must be a function that takes one argument, a window,
+and return either a new window (which will be used to display the
 desired buffer) or @code{nil} (which means the splitting failed).
 @end defopt
 
@@ -2198,15 +2204,15 @@
 @defopt same-window-buffer-names
 A list of buffer names for buffers that should be displayed in the
 selected window.  If a buffer's name is in this list,
address@hidden handles the buffer by switching to it in the
-selected window.
address@hidden handles the buffer by showing it in the selected
+window.
 @end defopt
 
 @defopt same-window-regexps
 A list of regular expressions that specify buffers that should be
 displayed in the selected window.  If the buffer's name matches any of
 the regular expressions in this list, @code{display-buffer} handles the
-buffer by switching to it in the selected window.
+buffer by showing it in the selected window.
 @end defopt
 
 @defun same-window-p buffer-name
@@ -2219,22 +2225,23 @@
 @section Window History
 @cindex window history
 
-Each window remembers the buffers it has previously displayed, and the order
-in which these buffers were removed from it.  This history is used,
-for example, by @code{replace-buffer-in-windows} (@pxref{Buffers and
-Windows}).  This list is automatically maintained by Emacs, but you can
-use the following functions to explicitly inspect or alter it:
+Each window remembers in a list the buffers it has previously displayed,
+and the order in which these buffers were removed from it.  This history
+is used, for example, by @code{replace-buffer-in-windows}
+(@pxref{Buffers and Windows}).  The list is automatically maintained by
+Emacs, but you can use the following functions to explicitly inspect or
+alter it:
 
 @defun window-prev-buffers &optional window
 This function returns a list specifying the previous contents of
address@hidden, which should be a live window and defaults to the
-selected window.
address@hidden  The optional argument @var{window} should be a live
+window and defaults to the selected one.
 
 Each list element has the form @code{(@var{buffer} @var{window-start}
 @var{window-pos})}, where @var{buffer} is a buffer previously shown in
 the window, @var{window-start} is the window start position when that
 buffer was last shown, and @var{window-pos} is the point position when
-that buffer was last shown.
+that buffer was last shown in @var{window}.
 
 The list is ordered so that earlier elements correspond to more
 recently-shown buffers, and the first element usually corresponds to the
@@ -2331,29 +2338,31 @@
 windows by marking these windows as @dfn{dedicated} to their buffers.
 @code{display-buffer} (@pxref{Choosing Window}) never uses a dedicated
 window for displaying another buffer in it.  @code{get-lru-window} and
address@hidden (@pxref{Selecting Windows}) do not consider
-dedicated windows as candidates when their @var{dedicated} argument is
address@hidden  The behavior of @code{set-window-buffer}
address@hidden (@pxref{Cyclic Window Ordering}) do not
+consider dedicated windows as candidates when their @var{dedicated}
+argument is address@hidden  The behavior of @code{set-window-buffer}
 (@pxref{Buffers and Windows}) with respect to dedicated windows is
 slightly different, see below.
 
-When @code{delete-windows-on} (@pxref{Deleting Windows}) wants to
-delete a dedicated window and that window is the only window on its
-frame, it deletes the window's frame too, provided there are other
-frames left.  @code{replace-buffer-in-windows} (@pxref{Switching
-Buffers}) tries to delete all dedicated windows showing its buffer
-argument.  When such a window is the only window on its frame, that
-frame is deleted, provided there are other frames left.  If there are
-no more frames left, some other buffer is displayed in the window, and
-the window is marked as non-dedicated.
-
-When you kill a buffer (@pxref{Killing Buffers}) displayed in a
-dedicated window, any such window usually gets deleted too, since
address@hidden calls @code{replace-buffer-in-windows} for cleaning
-up windows.  Burying a buffer (@pxref{The Buffer List}) deletes the
-selected window if it is dedicated to that buffer.  If, however, that
-window is the only window on its frame, @code{bury-buffer} displays
-another buffer in it and iconifies the frame.
+   Functions supposed to remove a buffer from a window or a window from
+a frame can behave specially when a window they operate on is dedicated.
+We will distinguish three basic cases, namely where (1) the window is
+not the only window on its frame, (2) the window is the only window on
+its frame but there are other frames on the same terminal left, and (3)
+the window is the only window on the only frame on the same terminal.
+
+   In particular, @code{delete-windows-on} (@pxref{Deleting Windows})
+handles case (2) by deleting the associated frame and case (3) by
+showing another buffer in that frame's only window.  The function
address@hidden (@pxref{Buffers and Windows}) which is
+called when a buffer gets killed, deletes the window in case (1) and
+behaves like @code{delete-windows-on} otherwise.
+
+   When @code{bury-buffer} (@pxref{The Buffer List}) operates on the
+selected window (which shows the buffer that shall be buried), it
+handles case (2) by calling @code{frame-auto-hide-function}
+(@pxref{Quitting Windows}) to deal with the selected frame.  The other
+two cases are handled as with @code{replace-buffer-in-windows}.
 
 @defun window-dedicated-p &optional window
 This function returns address@hidden if @var{window} is dedicated to its

=== modified file 'lisp/ChangeLog'
--- a/lisp/ChangeLog    2012-11-23 08:33:20 +0000
+++ b/lisp/ChangeLog    2012-11-24 01:57:09 +0000
@@ -1,3 +1,55 @@
+2012-11-24  Stefan Monnier  <address@hidden>
+
+       * emacs-lisp/bytecomp.el (byte-compile-file): Setup default value for
+       lexical-binding (bug#12938).
+
+2012-11-24  Wolfgang Jenkner  <address@hidden>
+
+       * image-mode.el (image-transform-check-size): Use assertions only
+       for images of type imagemagick.
+
+       Otherwise no error, image-transform-fit-to-{width,height} is
+       silently ignored, as before.  Doc fix.
+
+2012-11-24  Chong Yidong  <address@hidden>
+
+       * faces.el (color-defined-p): Doc fix (Bug#12853).
+
+2012-11-24  Juri Linkov  <address@hidden>
+
+       * dired.el (dired-mark): Add optional arg `interactive'.
+       Check for `use-region-p' if `interactive' is non-nil.
+       (dired-unmark, dired-flag-file-deletion): Add optional arg
+       `interactive'.  Call `dired-mark' with the arg `interactive'.
+       (Bug#10624)
+
+       * wdired.el: Revert 2012-10-17 change partly and replace it with
+       Patch by Christopher Schmidt <address@hidden>.
+       (wdired-finish-edit): Add marks for new file names to
+       `wdired-old-marks'.  Restore marks using `dired-mark-remembered'
+       after `revert-buffer'.
+       (wdired-do-renames): Remove calls to `dired-remove-file',
+       `dired-add-file', `dired-add-entry'.  (Bug#11795)
+
+2012-11-24  Alan Mackenzie  <address@hidden>
+
+       * progmodes/cc-defs.el (c-version): Bump to 5.32.4.
+
+       Fix bugs in the state cache.  Enhance a debugging mechanism.
+       * progmodes/cc-engine.el (c-parse-state-get-strategy): Don't use
+       "brace at column zero" strategy for C++.
+       (c-append-lower-brace-pair-to-state-cache): Repair algorithm.
+       (c-parse-state-point): New variable.
+       (c-record-parse-state-state): Record old parse state with
+       `copy-tree'.  Record previous value of point.
+       (c-debug-parse-state-double-cons): New debugging function.
+       (c-debug-parse-state): Call the above new function.
+       (c-toggle-parse-state-debug): Output a confirmatory message.
+
+       * progmodes/cc-mode.el (c-before-change, c-after-change):
+       Call c-invalidate-state-cache from `c-before-change' instead of
+       `c-after-change'.
+
 2012-11-23  Chong Yidong  <address@hidden>
 
        * find-cmd.el (find-constituents): Add executable, ipath,

=== modified file 'lisp/dired.el'
--- a/lisp/dired.el     2012-11-17 21:52:12 +0000
+++ b/lisp/dired.el     2012-11-24 01:57:09 +0000
@@ -3109,7 +3109,7 @@
            (insert dired-marker-char)))
       (forward-line 1))))
 
-(defun dired-mark (arg)
+(defun dired-mark (arg &optional interactive)
   "Mark the file at point in the Dired buffer.
 If the region is active, mark all files in the region.
 Otherwise, with a prefix arg, mark files on the next ARG lines.
@@ -3119,10 +3119,10 @@
 Use \\[dired-unmark-all-files] to remove all marks
 and \\[dired-unmark] on a subdir to remove the marks in
 this subdir."
-  (interactive "P")
+  (interactive (list current-prefix-arg t))
   (cond
    ;; Mark files in the active region.
-   ((and transient-mark-mode mark-active)
+   ((and interactive (use-region-p))
     (save-excursion
       (let ((beg (region-beginning))
            (end (region-end)))
@@ -3139,7 +3139,7 @@
        (prefix-numeric-value arg)
        (function (lambda () (delete-char 1) (insert dired-marker-char))))))))
 
-(defun dired-unmark (arg)
+(defun dired-unmark (arg &optional interactive)
   "Unmark the file at point in the Dired buffer.
 If the region is active, unmark all files in the region.
 Otherwise, with a prefix arg, unmark files on the next ARG lines.
@@ -3147,11 +3147,11 @@
 If looking at a subdir, unmark all its files except `.' and `..'.
 If the region is active in Transient Mark mode, unmark all files
 in the active region."
-  (interactive "P")
+  (interactive (list current-prefix-arg t))
   (let ((dired-marker-char ?\040))
-    (dired-mark arg)))
+    (dired-mark arg interactive)))
 
-(defun dired-flag-file-deletion (arg)
+(defun dired-flag-file-deletion (arg &optional interactive)
   "In Dired, flag the current line's file for deletion.
 If the region is active, flag all files in the region.
 Otherwise, with a prefix arg, flag files on the next ARG lines.
@@ -3159,9 +3159,9 @@
 If on a subdir headerline, flag all its files except `.' and `..'.
 If the region is active in Transient Mark mode, flag all files
 in the active region."
-  (interactive "P")
+  (interactive (list current-prefix-arg t))
   (let ((dired-marker-char dired-del-marker))
-    (dired-mark arg)))
+    (dired-mark arg interactive)))
 
 (defun dired-unmark-backward (arg)
   "In Dired, move up lines and remove marks or deletion flags there.

=== modified file 'lisp/emacs-lisp/bytecomp.el'
--- a/lisp/emacs-lisp/bytecomp.el       2012-11-20 19:05:20 +0000
+++ b/lisp/emacs-lisp/bytecomp.el       2012-11-24 01:57:09 +0000
@@ -1748,6 +1748,9 @@
         ;; There may be a file local variable setting (bug#10419).
         (setq buffer-read-only nil
               filename buffer-file-name))
+      ;; Don't inherit lexical-binding from caller (bug#12938).
+      (unless (local-variable-p 'lexical-binding)
+        (setq-local lexical-binding nil))
       ;; Set the default directory, in case an eval-when-compile uses it.
       (setq default-directory (file-name-directory filename)))
     ;; Check if the file's local variables explicitly specify not to

=== modified file 'lisp/faces.el'
--- a/lisp/faces.el     2012-11-21 08:39:08 +0000
+++ b/lisp/faces.el     2012-11-24 01:57:09 +0000
@@ -929,13 +929,25 @@
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
 (defun read-face-name (prompt &optional default multiple)
-  "Read a face, defaulting to the face or faces on the char after point.
-If it has the property `read-face-name', that overrides the `face' property.
-PROMPT should be a string that describes what the caller will do with the face;
-it should not end in a space.
+  "Read a face, defaulting to the face or faces at point.
+If the text at point has the property `read-face-name', that
+overrides the `face' property for determining the default.
+
+PROMPT should be a string that describes what the caller will do
+with the face; it should not end in a space.
+
+
+This function uses `completing-read-multiple' with \",\" as the
+separator character, i.e.
+
+
+
+
+
 The optional argument DEFAULT provides the value to display in the
 minibuffer prompt that is returned if the user just types RET
 unless DEFAULT is a string (in which case nil is returned).
+
 If MULTIPLE is non-nil, return a list of faces (possibly only one).
 Otherwise, return a single face."
   (let ((faceprop (or (get-char-property (point) 'read-face-name)
@@ -1692,12 +1704,16 @@
 (declare-function xw-color-defined-p "xfns.c" (color &optional frame))
 
 (defun color-defined-p (color &optional frame)
-  "Return non-nil if color COLOR is supported on frame FRAME.
-If FRAME is omitted or nil, use the selected frame.
-If COLOR is the symbol `unspecified' or one of the strings
-\"unspecified-fg\" or \"unspecified-bg\", the value is nil."
-  (if (member color '(unspecified "unspecified-bg" "unspecified-fg"))
-      nil
+  "Return non-nil if COLOR is supported on frame FRAME.
+COLOR should be a string naming a color (e.g. \"white\"), or a
+string specifying a color's RGB components (e.g. \"#ff12ec\"), or
+the symbol `unspecified'.
+
+This function returns nil if COLOR is the symbol `unspecified',
+or one of the strings \"unspecified-fg\" or \"unspecified-bg\".
+
+If FRAME is omitted or nil, use the selected frame."
+  (unless (member color '(unspecified "unspecified-bg" "unspecified-fg"))
     (if (member (framep (or frame (selected-frame))) '(x w32 ns))
        (xw-color-defined-p color frame)
       (numberp (tty-color-translate color frame)))))

=== modified file 'lisp/image-mode.el'
--- a/lisp/image-mode.el        2012-09-27 03:16:35 +0000
+++ b/lisp/image-mode.el        2012-11-23 17:41:01 +0000
@@ -746,8 +746,14 @@
            h)))))
 
 (defun image-transform-check-size ()
-  "Check that the image exactly fits the width/height of the window."
-  (unless (numberp image-transform-resize)
+  "Check that the image exactly fits the width/height of the window.
+
+Do this for an image of type `imagemagick' to make sure that the
+elisp code matches the way ImageMagick computes the bounding box
+of a rotated image."
+  (when (and (not (numberp image-transform-resize))
+            (boundp 'image-type)
+            (eq image-type 'imagemagick))
     (let ((size (image-display-size (image-get-display-property) t)))
       (cond ((eq image-transform-resize 'fit-width)
             (cl-assert (= (car size)

=== modified file 'lisp/progmodes/cc-defs.el'
--- a/lisp/progmodes/cc-defs.el 2012-09-13 18:41:21 +0000
+++ b/lisp/progmodes/cc-defs.el 2012-11-21 20:47:09 +0000
@@ -93,7 +93,7 @@
 
 ;;; Variables also used at compile time.
 
-(defconst c-version "5.32.3"
+(defconst c-version "5.32.4"
   "CC Mode version number.")
 
 (defconst c-version-sym (intern c-version))

=== modified file 'lisp/progmodes/cc-engine.el'
--- a/lisp/progmodes/cc-engine.el       2012-09-21 03:03:48 +0000
+++ b/lisp/progmodes/cc-engine.el       2012-11-21 20:41:03 +0000
@@ -2561,8 +2561,11 @@
              start-point cache-pos)))
 
     ;; Might we be better off starting from the top level, two defuns back,
-    ;; instead?
-    (when (> how-far c-state-cache-too-far)
+    ;; instead?  This heuristic no longer works well in C++, where
+    ;; declarations inside namespace brace blocks are frequently placed at
+    ;; column zero.
+    (when (and (not (c-major-mode-is 'c++-mode))
+              (> how-far c-state-cache-too-far))
       (setq BOD-pos (c-get-fallback-scan-pos here)) ; somewhat EXPENSIVE!!!
       (if (< (- here BOD-pos) how-far)
          (setq strategy 'BOD
@@ -2649,17 +2652,20 @@
        ;; If we're essentially repeating a fruitless search, just give up.
        (unless (and c-state-brace-pair-desert
                     (eq cache-pos (car c-state-brace-pair-desert))
+                    (or (null (car c-state-brace-pair-desert))
+                        (> from (car c-state-brace-pair-desert)))
                     (<= from (cdr c-state-brace-pair-desert)))
-         ;; DESERT-LIM.  Only search what we absolutely need to,
+         ;; DESERT-LIM.  Avoid repeated searching through the cached desert.
          (let ((desert-lim
                 (and c-state-brace-pair-desert
                      (eq cache-pos (car c-state-brace-pair-desert))
+                     (>= from (cdr c-state-brace-pair-desert))
                      (cdr c-state-brace-pair-desert)))
                ;; CACHE-LIM.  This limit will be necessary when an opening
                ;; paren at `cache-pos' has just had its matching close paren
-               ;; inserted.  `cache-pos' continues to be a search bound, even
-               ;; though the algorithm below would skip over the new paren
-               ;; pair.
+               ;; inserted into the buffer.  `cache-pos' continues to be a
+               ;; search bound, even though the algorithm below would skip
+               ;; over the new paren pair.
                (cache-lim (and cache-pos (< cache-pos from) cache-pos)))
            (narrow-to-region
                (cond
@@ -3342,12 +3348,18 @@
   (fset 'c-real-parse-state (symbol-function 'c-parse-state)))
 (cc-bytecomp-defun c-real-parse-state)
 
+(defvar c-parse-state-point nil)
 (defvar c-parse-state-state nil)
 (defun c-record-parse-state-state ()
+  (setq c-parse-state-point (point))
   (setq c-parse-state-state
        (mapcar
         (lambda (arg)
-          (cons arg (symbol-value arg)))
+          (let ((val (symbol-value arg)))
+            (cons arg
+                  (if (consp val)
+                      (copy-tree val)
+                    val))))
         '(c-state-cache
           c-state-cache-good-pos
           c-state-nonlit-pos-cache
@@ -3360,7 +3372,8 @@
           c-state-point-min-lit-start
           c-state-min-scan-pos
           c-state-old-cpp-beg
-          c-state-old-cpp-end))))
+          c-state-old-cpp-end
+          c-parse-state-point))))
 (defun c-replay-parse-state-state ()
   (message
    (concat "(setq "
@@ -3370,6 +3383,16 @@
      c-parse-state-state "  ")
     ")")))
 
+(defun c-debug-parse-state-double-cons (state)
+  (let (state-car conses-not-ok)
+    (while state
+      (setq state-car (car state)
+           state (cdr state))
+      (if (and (consp state-car)
+              (consp (car state)))
+         (setq conses-not-ok t)))
+    conses-not-ok))
+
 (defun c-debug-parse-state ()
   (let ((here (point)) (res1 (c-real-parse-state)) res2)
     (let ((c-state-cache nil)
@@ -3402,8 +3425,16 @@
               here res1 res2)
       (message "Old state:")
       (c-replay-parse-state-state))
+
+    (when (c-debug-parse-state-double-cons res1)
+      (message "c-parse-state INVALIDITY at %s: %s"
+              here res1)
+      (message "Old state:")
+      (c-replay-parse-state-state))
+
     (c-record-parse-state-state)
-    res1))
+    res2 ; res1 correct a cascading series of errors ASAP
+    ))
 
 (defun c-toggle-parse-state-debug (&optional arg)
   (interactive "P")
@@ -3411,7 +3442,9 @@
   (fset 'c-parse-state (symbol-function (if c-debug-parse-state
                                            'c-debug-parse-state
                                          'c-real-parse-state)))
-  (c-keep-region-active))
+  (c-keep-region-active)
+  (message "c-debug-parse-state %sabled"
+          (if c-debug-parse-state "en" "dis")))
 (when c-debug-parse-state
   (c-toggle-parse-state-debug 1))
 

=== modified file 'lisp/progmodes/cc-mode.el'
--- a/lisp/progmodes/cc-mode.el 2012-10-23 15:06:07 +0000
+++ b/lisp/progmodes/cc-mode.el 2012-11-21 20:41:03 +0000
@@ -1034,7 +1034,10 @@
            (mapc (lambda (fn)
                    (funcall fn beg end))
                  c-get-state-before-change-functions))
-       ))))
+       )))
+  ;; The following must be done here rather than in `c-after-change' because
+  ;; newly inserted parens would foul up the invalidation algorithm.
+  (c-invalidate-state-cache beg))
 
 (defvar c-in-after-change-fontification nil)
 (make-variable-buffer-local 'c-in-after-change-fontification)
@@ -1082,7 +1085,7 @@
 
        (c-trim-found-types beg end old-len) ; maybe we don't need all of these.
        (c-invalidate-sws-region-after beg end)
-       (c-invalidate-state-cache beg)
+       ;; (c-invalidate-state-cache beg) ; moved to `c-before-change'.
        (c-invalidate-find-decl-cache beg)
 
        (when c-recognize-<>-arglists

=== modified file 'lisp/wdired.el'
--- a/lisp/wdired.el    2012-10-27 09:17:14 +0000
+++ b/lisp/wdired.el    2012-11-23 07:28:37 +0000
@@ -399,6 +399,15 @@
             (setq changes t)
             (if (not file-new)         ;empty filename!
                 (push file-old files-deleted)
+             (when wdired-keep-marker-rename
+               (let ((mark (cond ((integerp wdired-keep-marker-rename)
+                                  wdired-keep-marker-rename)
+                                 (wdired-keep-marker-rename
+                                  (cdr (assoc file-old wdired-old-marks)))
+                                 (t nil))))
+                 (when mark
+                   (push (cons (substitute-in-file-name file-new) mark)
+                         wdired-old-marks))))
               (push (cons file-old (substitute-in-file-name file-new))
                     files-renamed))))
        (forward-line -1)))
@@ -416,7 +425,9 @@
                     (= (length files-renamed) 1))
            (setq dired-directory (cdr (car files-renamed))))
          ;; Re-sort the buffer.
-         (revert-buffer))
+         (revert-buffer)
+         (let ((inhibit-read-only t))
+           (dired-mark-remembered wdired-old-marks)))
       (let ((inhibit-read-only t))
        (remove-text-properties (point-min) (point-max)
                                '(old-name nil end-name nil old-link nil
@@ -430,8 +441,6 @@
   (set-buffer-modified-p nil)
   (setq buffer-undo-list nil))
 
-(declare-function dired-add-entry "dired-aux" (filename &optional marker-char 
relative))
-
 (defun wdired-do-renames (renames)
   "Perform RENAMES in parallel."
   (let ((residue ())
@@ -473,8 +482,7 @@
               (push (cons tmp file-new) residue))))
          (t
           (setq progress t)
-          (let* ((file-ori (car rename))
-                 (old-mark (cdr (assoc file-ori wdired-old-marks))))
+          (let ((file-ori (car rename)))
             (if wdired-use-interactive-rename
                 (wdired-search-and-rename file-ori file-new)
               ;; If dired-rename-file autoloads dired-aux while
@@ -485,20 +493,12 @@
               (condition-case err
                   (let ((dired-backup-overwrite nil))
                     (dired-rename-file file-ori file-new
-                                       overwrite)
-                    (dired-remove-file file-ori)
-                    (dired-add-file
-                    file-new
-                    (cond ((integerp wdired-keep-marker-rename)
-                           wdired-keep-marker-rename)
-                          (wdired-keep-marker-rename old-mark)
-                          (t nil))))
+                                       overwrite))
                 (error
                  (setq errors (1+ errors))
                  (dired-log (concat "Rename `" file-ori "' to `"
                                     file-new "' failed:\n%s\n")
-                            err)
-                 (dired-add-entry file-ori old-mark)))))))))
+                            err)))))))))
     errors))
 
 

=== modified file 'src/.gdbinit'
--- a/src/.gdbinit      2012-11-09 11:38:31 +0000
+++ b/src/.gdbinit      2012-11-24 01:57:09 +0000
@@ -495,7 +495,8 @@
   end
   xgettype ($g.object)
   if ($type == Lisp_String)
-    printf " str=%x[%d]", $g.object, $g.charpos
+    xgetptr $g.object
+    printf " str=0x%x[%d]", ((struct Lisp_String *)$ptr)->data, $g.charpos
   else
     printf " pos=%d", $g.charpos
   end

=== modified file 'src/ChangeLog'
--- a/src/ChangeLog     2012-11-23 15:39:48 +0000
+++ b/src/ChangeLog     2012-11-24 01:57:09 +0000
@@ -1,3 +1,17 @@
+2012-11-24  Eli Zaretskii  <address@hidden>
+
+       * xdisp.c (set_cursor_from_row): Skip step 2 only if point is not
+       between bpos_covered and bpos_max.  This fixes cursor display when
+       several display strings follow each other.
+
+       * .gdbinit (pgx): If the glyph's object is a string, display the
+       pointer to string data, rather than the value of the string object
+       itself (which barfs under CHECK_LISP_OBJECT_TYPE).
+
+       * indent.c (Fvertical_motion): If the starting position is covered
+       by a display string, return to one position before that, to avoid
+       overshooting it inside move_it_to.  (Bug#12930)
+
 2012-11-23  Dmitry Antipov  <address@hidden>
 
        * frame.h (struct frame): Remove display_preempted member

=== modified file 'src/indent.c'
--- a/src/indent.c      2012-11-02 10:34:26 +0000
+++ b/src/indent.c      2012-11-24 01:57:09 +0000
@@ -2048,7 +2048,13 @@
           comment said this is "so we don't move too far" (2005-01-19
           checkin by kfs).  But this does nothing useful that I can
           tell, and it causes Bug#2694 .  -- cyd */
-       move_it_to (&it, PT, -1, -1, -1, MOVE_TO_POS);
+       /* When the position we started from is covered by a display
+          string, move_it_to will overshoot it, while vertical-motion
+          wants to put the cursor _before_ the display string.  So in
+          that case, we move to buffer position before the display
+          string, and avoid overshooting.  */
+       move_it_to (&it, disp_string_at_start_p ? PT - 1 : PT,
+                   -1, -1, -1, MOVE_TO_POS);
 
       /* IT may move too far if truncate-lines is on and PT lies
         beyond the right margin.  IT may also move too far if the

=== modified file 'src/xdisp.c'
--- a/src/xdisp.c       2012-11-22 09:32:32 +0000
+++ b/src/xdisp.c       2012-11-24 01:57:09 +0000
@@ -14233,7 +14233,7 @@
      GLYPH_BEFORE and GLYPH_AFTER.  */
   if (!((row->reversed_p ? glyph > glyphs_end : glyph < glyphs_end)
        && BUFFERP (glyph->object) && glyph->charpos == pt_old)
-      && bpos_covered < pt_old)
+      && !(bpos_max < pt_old && pt_old <= bpos_covered))
     {
       /* An empty line has a single glyph whose OBJECT is zero and
         whose CHARPOS is the position of a newline on that line.


reply via email to

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