changeset 108398:1789ed4b257e

Merge from mainline.
author Katsumi Yamaoka <yamaoka@jpl.org>
date Sun, 17 Jan 2010 00:12:59 +0000
parents c5b62c5789d8 (current diff) 8357132d4077 (diff)
children eb2ca69029d2
files admin/notes/commits admin/notes/cvslogs
diffstat 38 files changed, 388 insertions(+), 110 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/admin/notes/commits	Sun Jan 17 00:12:59 2010 +0000
@@ -0,0 +1,53 @@
+HOW TO COMMIT CHANGES TO EMACS
+
+http://lists.gnu.org/archive/html/emacs-devel/2009-03/msg00555.html
+From: 	 Miles Bader
+Subject: commit style redux
+Date: 	 Tue, 31 Mar 2009 12:21:20 +0900
+
+(1) Commit all changed files at once with a single log message (which
+    in CVS will result in an identical log message for all committed
+    files), not one-by-one.  This is pretty easy using vc-dir now.
+
+(2) Make the log message describe the entire changeset, perhaps
+    including relevant changelog entiries (I often don't bother with
+    the latter if it's a trivial sort of change).
+
+    Many modern source-control systems vaguely distinguish the first
+    line of the log message to use as a short summary for abbreviated
+    history listing (in arch this was explicitly called the summary,
+    but many other systems have a similar concept).  So it's nice if
+    you can format the log entry like:
+
+        SHORTISH ONE-LINE SUMMARY
+
+        MULTIPLE-LINE DETAILED DESCRIPTION POSSIBLY INCLUDING (OR
+        CONSISTING OF) CHANGELOG ENTRIES
+
+    [Even with CVS this style is useful, because web CVS browsing
+    interfaces often include the first N words of the log message of
+    the most recent commit as a short "most recent change"
+    description.]
+
+(3) Don't phrase log messages assuming the filename is known, because
+    in non-file-oriented systems (everything modern other than CVS),
+    the log listing tends to be treated as global information, and the
+    connection with specific files is less explicit.
+
+    For instance, currently I often see log messages like "Regenerate";
+    for modern source-control systems with a global log, it's better to
+    have something like "Regenerate configure".
+
+
+Followup discussion:
+http://lists.gnu.org/archive/html/emacs-devel/2010-01/msg00897.html
+
+
+PREVIOUS GUIDELINES FOR CVS
+
+For historical interest only, here is the old-style advice for CVS logs:
+http://lists.gnu.org/archive/html/emacs-devel/2007-12/msg01208.html
+
+From: Eli Zaretskii
+Subject: Re: Log messages in CVS
+Date: Sat, 29 Dec 2007 16:06:29 +0200
--- a/admin/notes/cvslogs	Fri Jan 15 14:21:59 2010 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,15 +0,0 @@
-http://lists.gnu.org/archive/html/emacs-devel/2007-12/msg01208.html
-
-From: Eli Zaretskii
-Subject: Re: Log messages in CVS
-Date: Sat, 29 Dec 2007 16:06:29 +0200
-
-I once posted a summary that I know about; see:
-
-  http://lists.gnu.org/archive/html/emacs-devel/2006-11/msg00229.html
-  http://lists.gnu.org/archive/html/emacs-devel/2006-11/msg00234.html
-  http://lists.gnu.org/archive/html/emacs-devel/2006-11/msg00312.html
-
-Richard commented here, basically approving my summary:
-
-  http://lists.gnu.org/archive/html/emacs-devel/2006-11/msg00276.html
--- a/doc/misc/ChangeLog	Fri Jan 15 14:21:59 2010 +0000
+++ b/doc/misc/ChangeLog	Sun Jan 17 00:12:59 2010 +0000
@@ -1,3 +1,8 @@
+2010-01-16  Mario Lang  <mlang@delysid.org>
+
+	* ede.texi (ede-target):
+	* org.texi (Refiling notes): Remove duplicated words.
+
 2010-01-04  Stefan Monnier  <monnier@iro.umontreal.ca>
 
 	* gnus.texi (Posting Styles): Use with-current-buffer.
--- a/doc/misc/ede.texi	Fri Jan 15 14:21:59 2010 +0000
+++ b/doc/misc/ede.texi	Sun Jan 17 00:12:59 2010 +0000
@@ -1968,7 +1968,7 @@
 
 @deffn Method ede-expand-filename :AFTER this filename &optional force
 Return a fully qualified file name based on target @var{THIS}.
-@var{FILENAME} should a a filename which occurs in a directory in which @var{THIS} works.
+@var{FILENAME} should be a filename which occurs in a directory in which @var{THIS} works.
 Optional argument @var{FORCE} forces the default filename to be provided even if it
 doesn't exist.
 @end deffn
--- a/doc/misc/org.texi	Fri Jan 15 14:21:59 2010 +0000
+++ b/doc/misc/org.texi	Sun Jan 17 00:12:59 2010 +0000
@@ -6181,7 +6181,7 @@
 select a location via a file-path-like completion along the outline path, see
 the variables @code{org-refile-use-outline-path} and
 @code{org-outline-path-complete-in-steps}.  If you would like to be able to
-create new nodes as new parents for for refiling on the fly, check the
+create new nodes as new parents for refiling on the fly, check the
 variable @code{org-refile-allow-creating-parent-nodes}.
 @kindex C-u C-c C-w
 @item C-u C-c C-w
--- a/etc/ChangeLog	Fri Jan 15 14:21:59 2010 +0000
+++ b/etc/ChangeLog	Sun Jan 17 00:12:59 2010 +0000
@@ -1,3 +1,8 @@
+2010-01-16  Mario Lang  <mlang@delysid.org>
+
+	* srecode/doc-cpp.srt, srecode/doc-default.srt:
+	* srecode/doc-java.srt: Remove duplicated words.
+
 2010-01-14  Nick Roberts  <nickrob@snap.net.nz>
 
 	* etc/images/gud/recstart.xpm, etc/images/gud/recstop.xpm:
--- a/etc/srecode/doc-cpp.srt	Fri Jan 15 14:21:59 2010 +0000
+++ b/etc/srecode/doc-cpp.srt	Sun Jan 17 00:12:59 2010 +0000
@@ -58,7 +58,7 @@
 ----
 
 template group-comment-end :blank :indent
-"A comment occurring at the end of a a group of declarations.
+"A comment occurring at the end of a group of declarations.
 Recycle doxygen comment code from the more general template set."
 ----
 {{>:classdecl:doxygen-function-group-end}}
@@ -75,7 +75,7 @@
 ----
 
 template group-comment-end :blank :indent
-"A comment occurring at the end of a a group of declarations.
+"A comment occurring at the end of a group of declarations.
 Recycle doxygen comment code from the more general template set."
 ----
 {{>:classdecl:doxygen-function-group-end}}
--- a/etc/srecode/doc-default.srt	Fri Jan 15 14:21:59 2010 +0000
+++ b/etc/srecode/doc-default.srt	Sun Jan 17 00:12:59 2010 +0000
@@ -57,7 +57,7 @@
 ----
 
 template group-comment-end :indent
-"A comment occurring at the end of a a group of declarations."
+"A comment occurring at the end of a group of declarations."
 ----
 {{comment_start}} End {{?GROUPNAME}} {{comment_end}}
 ----
@@ -72,7 +72,7 @@
 ----
 
 template group-comment-end :indent
-"A comment occurring at the end of a a group of declarations."
+"A comment occurring at the end of a group of declarations."
 ----
 {{>:declaration:group-comment-end}}
 ----
--- a/etc/srecode/doc-java.srt	Fri Jan 15 14:21:59 2010 +0000
+++ b/etc/srecode/doc-java.srt	Sun Jan 17 00:12:59 2010 +0000
@@ -59,7 +59,7 @@
 ----
 
 template group-comment-end :blank :indent
-"A comment occurring at the end of a a group of declarations.
+"A comment occurring at the end of a group of declarations.
 Recycle javadoc comment code from the more general template set."
 ----
 {{>:classdecl:javadoc-function-group-end}}
@@ -76,7 +76,7 @@
 ----
 
 template group-comment-end :blank :indent
-"A comment occurring at the end of a a group of declarations.
+"A comment occurring at the end of a group of declarations.
 Recycle javadoc comment code from the more general template set."
 ----
 {{>:classdecl:javadoc-function-group-end}}
--- a/lib-src/etags.c	Fri Jan 15 14:21:59 2010 +0000
+++ b/lib-src/etags.c	Sun Jan 17 00:12:59 2010 +0000
@@ -6297,7 +6297,7 @@
 		  readline (lbp, stream);
 		  return;
 		} /* if a real #line directive */
-	    } /* if #line is followed by a a number */
+	    } /* if #line is followed by a number */
 	} /* if line begins with "#line " */
 
       /* If we are here, no #line directive was found. */
--- a/lisp/ChangeLog	Fri Jan 15 14:21:59 2010 +0000
+++ b/lisp/ChangeLog	Sun Jan 17 00:12:59 2010 +0000
@@ -1,3 +1,48 @@
+2010-01-16  Lennart Borgman  <lennart.borgman@gmail.com>
+
+	* nxml/nxml-mode.el (nxml-extend-after-change-region): Never
+	return t (Bug#3898).
+
+2010-01-16  Frédéric Perrin  <frederic.perrin@resel.fr>  (tiny change)
+
+	* vc-dispatcher.el (vc-do-command): Set LC_MESSAGES, so that we
+	can parse the output of the external commands (Bug#5279).
+
+2010-01-16  Jari Aalto  <jari.aalto@cante.net>
+
+	* pcmpl-unix.el (pcmpl-unix-read-passwd-file): Doc fix.
+
+2010-01-16  Chong Yidong  <cyd@stupidchicken.com>
+
+	* emacs-lisp/advice.el (ad-add-advice): Doc fix (Bug#5274)
+
+	* emacs-lisp/cl-macs.el (defstruct): Doc fix (Bug#5267).
+
+	* startup.el (command-line): Remove unused --icon-type arg.
+	Handle --display arg, passing it to command-line-1 (Bug#5392).
+
+2010-01-16  Mario Lang  <mlang@delysid.org>
+
+	* cedet/ede/cpp-root.el (ede-cpp-root-project):
+	* cedet/ede/files.el (ede-expand-filename):
+	* cedet/ede/simple.el (ede-simple-project):
+	* cedet/semantic/complete.el (semantic-complete-read-tag-engine)
+	(semantic-complete-inline-tag-engine):
+	* cedet/semantic/db-el.el (semanticdb-equivalent-mode):
+	* cedet/semantic/db-global.el (semanticdb-equivalent-mode):
+	* cedet/semantic/db-javascript.el (semanticdb-equivalent-mode):
+	* cedet/semantic/db.el (semanticdb-equivalent-mode):
+	* cedet/semantic/decorate/include.el (semantic-decoration-unknown-include-describe):
+	* cedet/semantic/idle.el (semantic-idle-work-for-one-buffer):
+	* emacs-lisp/chart.el (chart-translate-namezone):
+	* textmodes/artist.el (artist-compute-popup-menu-table):
+	Remove duplicated words in doc-strings.
+
+2010-01-15   David Abrahams  <dave@boostpro.com>  (tiny change)
+
+	* net/mairix.el (mairix-widget-send-query): Send -1 instead of nil
+	to mairix-search to suppress threading (Bug#5342).
+
 2010-01-15  Kenichi Handa  <handa@m17n.org>
 
 	* international/mule-cmds.el (canonicalize-coding-system-name):
@@ -1468,7 +1513,7 @@
 2009-12-01  Dan Nicolaescu  <dann@ics.uci.edu>
 
 	Make vc-print-log buttons work.
-	* log-view.el (log-view-mode-map): Inherit from from widget-keymap.
+	* log-view.el (log-view-mode-map): Inherit from widget-keymap.
 
 2009-11-30  Ryan C. Thompson  <rct@thompsonclan.org>  (tiny change)
 
--- a/lisp/cedet/ede/cpp-root.el	Fri Jan 15 14:21:59 2010 +0000
+++ b/lisp/cedet/ede/cpp-root.el	Sun Jan 17 00:12:59 2010 +0000
@@ -324,7 +324,7 @@
 	       )
    )
   "EDE cpp-root project class.
-Each directory needs a a project file to control it.")
+Each directory needs a project file to control it.")
 
 ;;; INIT
 ;;
--- a/lisp/cedet/ede/files.el	Fri Jan 15 14:21:59 2010 +0000
+++ b/lisp/cedet/ede/files.el	Sun Jan 17 00:12:59 2010 +0000
@@ -487,7 +487,7 @@
 
 (defmethod ede-expand-filename ((this ede-target) filename &optional force)
   "Return a fully qualified file name based on target THIS.
-FILENAME should a a filename which occurs in a directory in which THIS works.
+FILENAME should be a filename which occurs in a directory in which THIS works.
 Optional argument FORCE forces the default filename to be provided even if it
 doesn't exist."
   (ede-expand-filename (ede-target-parent this) filename force))
--- a/lisp/cedet/ede/simple.el	Fri Jan 15 14:21:59 2010 +0000
+++ b/lisp/cedet/ede/simple.el	Sun Jan 17 00:12:59 2010 +0000
@@ -87,7 +87,7 @@
    (file-header-line :initform ";; EDE Simple Project")
    )
   "EDE Simple project class.
-Each directory needs a a project file to control it.")
+Each directory needs a project file to control it.")
 
 (defmethod ede-commit-project ((proj ede-simple-project))
   "Commit any change to PROJ to its file."
--- a/lisp/cedet/semantic/complete.el	Fri Jan 15 14:21:59 2010 +0000
+++ b/lisp/cedet/semantic/complete.el	Sun Jan 17 00:12:59 2010 +0000
@@ -192,7 +192,7 @@
 						    default-tag initial-input
 						    history)
   "Read a semantic tag, and return a tag for the selection.
-Argument COLLECTOR is an object which can be used to to calculate
+Argument COLLECTOR is an object which can be used to calculate
 a list of possible hits.  See `semantic-completion-collector-engine'
 for details on COLLECTOR.
 Argument DISPLAYOR is an object used to display a list of possible
@@ -394,7 +394,7 @@
 
 ;;; Keybindings
 ;;
-;; Keys are bound to to perform completion using our mechanisms.
+;; Keys are bound to perform completion using our mechanisms.
 ;; Do that work here.
 (defun semantic-complete-done ()
   "Accept the current input."
@@ -738,7 +738,7 @@
 (defun semantic-complete-inline-tag-engine
   (collector displayor buffer start end)
   "Perform completion based on semantic tags in a buffer.
-Argument COLLECTOR is an object which can be used to to calculate
+Argument COLLECTOR is an object which can be used to calculate
 a list of possible hits.  See `semantic-completion-collector-engine'
 for details on COLLECTOR.
 Argument DISPLAYOR is an object used to display a list of possible
--- a/lisp/cedet/semantic/db-el.el	Fri Jan 15 14:21:59 2010 +0000
+++ b/lisp/cedet/semantic/db-el.el	Sun Jan 17 00:12:59 2010 +0000
@@ -107,7 +107,7 @@
 
 (defmethod semanticdb-equivalent-mode ((table semanticdb-table-emacs-lisp) &optional buffer)
   "Return non-nil if TABLE's mode is equivalent to BUFFER.
-Equivalent modes are specified by by `semantic-equivalent-major-modes'
+Equivalent modes are specified by the `semantic-equivalent-major-modes'
 local variable."
   (with-current-buffer buffer
     (eq (or mode-local-active-mode major-mode) 'emacs-lisp-mode)))
--- a/lisp/cedet/semantic/db-global.el	Fri Jan 15 14:21:59 2010 +0000
+++ b/lisp/cedet/semantic/db-global.el	Sun Jan 17 00:12:59 2010 +0000
@@ -105,7 +105,7 @@
 
 (defmethod semanticdb-equivalent-mode ((table semanticdb-table-global) &optional buffer)
   "Return t, pretend that this table's mode is equivalent to BUFFER.
-Equivalent modes are specified by by `semantic-equivalent-major-modes'
+Equivalent modes are specified by the `semantic-equivalent-major-modes'
 local variable."
   ;; @todo - hack alert!
   t)
--- a/lisp/cedet/semantic/db-javascript.el	Fri Jan 15 14:21:59 2010 +0000
+++ b/lisp/cedet/semantic/db-javascript.el	Sun Jan 17 00:12:59 2010 +0000
@@ -145,7 +145,7 @@
 
 (defmethod semanticdb-equivalent-mode ((table semanticdb-table-javascript) &optional buffer)
   "Return non-nil if TABLE's mode is equivalent to BUFFER.
-Equivalent modes are specified by by `semantic-equivalent-major-modes'
+Equivalent modes are specified by the `semantic-equivalent-major-modes'
 local variable."
   (with-current-buffer buffer
     (eq (or mode-local-active-mode major-mode) 'javascript-mode)))
--- a/lisp/cedet/semantic/db.el	Fri Jan 15 14:21:59 2010 +0000
+++ b/lisp/cedet/semantic/db.el	Sun Jan 17 00:12:59 2010 +0000
@@ -735,13 +735,13 @@
 
 (defmethod semanticdb-equivalent-mode ((table semanticdb-abstract-table) &optional buffer)
   "Return non-nil if TABLE's mode is equivalent to BUFFER.
-Equivalent modes are specified by by `semantic-equivalent-major-modes'
+Equivalent modes are specified by the `semantic-equivalent-major-modes'
 local variable."
   nil)
 
 (defmethod semanticdb-equivalent-mode ((table semanticdb-table) &optional buffer)
   "Return non-nil if TABLE's mode is equivalent to BUFFER.
-Equivalent modes are specified by by `semantic-equivalent-major-modes'
+Equivalent modes are specified by the `semantic-equivalent-major-modes'
 local variable."
   (save-excursion
     (if buffer (set-buffer buffer))
--- a/lisp/cedet/semantic/decorate/include.el	Fri Jan 15 14:21:59 2010 +0000
+++ b/lisp/cedet/semantic/decorate/include.el	Sun Jan 17 00:12:59 2010 +0000
@@ -461,7 +461,7 @@
 
       (when (or (eq mm 'c++-mode) (eq mm 'c-mode))
 	(princ "
-For C/C++ includes located within a a project, you can use a special
+For C/C++ includes located within a project, you can use a special
 EDE project that will wrap an existing build system.  You can do that
 like this in your .emacs file:
 
--- a/lisp/cedet/semantic/idle.el	Fri Jan 15 14:21:59 2010 +0000
+++ b/lisp/cedet/semantic/idle.el	Sun Jan 17 00:12:59 2010 +0000
@@ -336,7 +336,7 @@
 
 
 (defun semantic-idle-work-for-one-buffer (buffer)
-  "Do long-processing work for for BUFFER.
+  "Do long-processing work for BUFFER.
 Uses `semantic-safe' and returns the output.
 Returns t of all processing succeeded."
   (with-current-buffer buffer
--- a/lisp/emacs-lisp/advice.el	Fri Jan 15 14:21:59 2010 +0000
+++ b/lisp/emacs-lisp/advice.el	Sun Jan 17 00:12:59 2010 +0000
@@ -2422,16 +2422,28 @@
 ;;;###autoload
 (defun ad-add-advice (function advice class position)
   "Add a piece of ADVICE to FUNCTION's list of advices in CLASS.
-If FUNCTION already has one or more pieces of advice of the specified
-CLASS then POSITION determines where the new piece will go.  The value
-of POSITION can either be `first', `last' or a number where 0 corresponds
-to `first'.  Numbers outside the range will be mapped to the closest
-extreme position.  If there was already a piece of ADVICE with the same
-name, then the position argument will be ignored and the old advice
-will be overwritten with the new one.
-    If the FUNCTION was not advised already, then its advice info will be
-initialized.  Redefining a piece of advice whose name is part of the cache-id
-will clear the cache."
+
+ADVICE has the form (NAME PROTECTED ENABLED DEFINITION), where
+NAME is the advice name; PROTECTED is a flag specifying whether
+to protect against non-local exits; ENABLED is a flag specifying
+whether to initially enable the advice; and DEFINITION has the
+form (advice . LAMBDA), where LAMBDA is a lambda expression.
+
+If FUNCTION already has a piece of advice with the same name,
+then POSITION is ignored, and the old advice is overwritten with
+the new one.
+
+If FUNCTION already has one or more pieces of advice of the
+specified CLASS, then POSITION determines where the new piece
+goes.  POSITION can either be `first', `last' or a number (where
+0 corresponds to `first', and numbers outside the valid range are
+mapped to the closest extremal position).
+
+If FUNCTION was not advised already, its advice info will be
+initialized.  Redefining a piece of advice whose name is part of
+the cache-id will clear the cache.
+
+See Info node `(elisp)Computed Advice' for detailed documentation."
   (cond ((not (ad-is-advised function))
          (ad-initialize-advice-info function)
 	 (ad-set-advice-info-field
--- a/lisp/emacs-lisp/chart.el	Fri Jan 15 14:21:59 2010 +0000
+++ b/lisp/emacs-lisp/chart.el	Sun Jan 17 00:12:59 2010 +0000
@@ -323,7 +323,7 @@
 (defmethod chart-translate-namezone ((c chart) n)
   "Return a dot-pair representing a positional range for a name.
 The name in chart C of the Nth name resides.
-Automatically compensates for for direction."
+Automatically compensates for direction."
   (let* ((dir (oref c direction))
 	 (w (if (eq dir 'vertical) (oref c x-width) (oref c y-width)))
 	 (m (if (eq dir 'vertical) (oref c y-margin) (oref c x-margin)))
--- a/lisp/emacs-lisp/cl-loaddefs.el	Fri Jan 15 14:21:59 2010 +0000
+++ b/lisp/emacs-lisp/cl-loaddefs.el	Sun Jan 17 00:12:59 2010 +0000
@@ -282,7 +282,7 @@
 ;;;;;;  flet progv psetq do-all-symbols do-symbols dotimes dolist
 ;;;;;;  do* do loop return-from return block etypecase typecase ecase
 ;;;;;;  case load-time-value eval-when destructuring-bind function*
-;;;;;;  defmacro* defun* gentemp gensym) "cl-macs" "cl-macs.el" "3867c0613dfd69780f561012a1dfe67b")
+;;;;;;  defmacro* defun* gentemp gensym) "cl-macs" "cl-macs.el" "e10a7e42199c08dc39460f67dd2d424b")
 ;;; Generated autoloads from cl-macs.el
 
 (autoload 'gensym "cl-macs" "\
@@ -672,11 +672,21 @@
 
 (autoload 'defstruct "cl-macs" "\
 Define a struct type.
-This macro defines a new Lisp data type called NAME, which contains data
-stored in SLOTs.  This defines a `make-NAME' constructor, a `copy-NAME'
-copier, a `NAME-p' predicate, and setf-able `NAME-SLOT' accessors.
+This macro defines a new data type called NAME that stores data
+in SLOTs.  It defines a `make-NAME' constructor, a `copy-NAME'
+copier, a `NAME-p' predicate, and slot accessors named `NAME-SLOT'.
+You can use the accessors to set the corresponding slots, via `setf'.
 
-\(fn (NAME OPTIONS...) (SLOT SLOT-OPTS...)...)" nil (quote macro))
+NAME may instead take the form (NAME OPTIONS...), where each
+OPTION is either a single keyword or (KEYWORD VALUE).
+See Info node `(cl)Structures' for a list of valid keywords.
+
+Each SLOT may instead take the form (SLOT SLOT-OPTS...), where
+SLOT-OPTS are keyword-value pairs for that slot.  Currently, only
+one keyword is supported, `:read-only'.  If this has a non-nil
+value, that slot cannot be set via `setf'.
+
+\(fn NAME SLOTS...)" nil (quote macro))
 
 (autoload 'cl-struct-setf-expander "cl-macs" "\
 Not documented
--- a/lisp/emacs-lisp/cl-macs.el	Fri Jan 15 14:21:59 2010 +0000
+++ b/lisp/emacs-lisp/cl-macs.el	Sun Jan 17 00:12:59 2010 +0000
@@ -2191,11 +2191,21 @@
 ;;;###autoload
 (defmacro defstruct (struct &rest descs)
   "Define a struct type.
-This macro defines a new Lisp data type called NAME, which contains data
-stored in SLOTs.  This defines a `make-NAME' constructor, a `copy-NAME'
-copier, a `NAME-p' predicate, and setf-able `NAME-SLOT' accessors.
+This macro defines a new data type called NAME that stores data
+in SLOTs.  It defines a `make-NAME' constructor, a `copy-NAME'
+copier, a `NAME-p' predicate, and slot accessors named `NAME-SLOT'.
+You can use the accessors to set the corresponding slots, via `setf'.
 
-\(fn (NAME OPTIONS...) (SLOT SLOT-OPTS...)...)"
+NAME may instead take the form (NAME OPTIONS...), where each
+OPTION is either a single keyword or (KEYWORD VALUE).
+See Info node `(cl)Structures' for a list of valid keywords.
+
+Each SLOT may instead take the form (SLOT SLOT-OPTS...), where
+SLOT-OPTS are keyword-value pairs for that slot.  Currently, only
+one keyword is supported, `:read-only'.  If this has a non-nil
+value, that slot cannot be set via `setf'.
+
+\(fn NAME SLOTS...)"
   (let* ((name (if (consp struct) (car struct) struct))
 	 (opts (cdr-safe struct))
 	 (slots nil)
--- a/lisp/emulation/edt.el	Fri Jan 15 14:21:59 2010 +0000
+++ b/lisp/emulation/edt.el	Sun Jan 17 00:12:59 2010 +0000
@@ -2107,7 +2107,7 @@
       (setq edt-term "pc")
     (if (or (not edt-window-system) (eq edt-window-system 'tty))
 	(setq edt-term (getenv "TERM"))))
-  ;; Look for for terminal configuration file for this terminal type.
+  ;; Look for a terminal configuration file for this terminal type.
   ;; Otherwise, load the user's custom configuration file.
   (if (or (not edt-window-system) (memq edt-window-system '(pc tty)))
       (progn
--- a/lisp/net/mairix.el	Fri Jan 15 14:21:59 2010 +0000
+++ b/lisp/net/mairix.el	Sun Jan 17 00:12:59 2010 +0000
@@ -341,7 +341,7 @@
 
 (defun mairix-search (search threads)
   "Call Mairix with SEARCH.
-If THREADS is t, also display whole threads of found
+If THREADS is non-nil, also display whole threads of found
 messages.  Results will be put into the default search file."
   (interactive
    (list
@@ -595,9 +595,7 @@
   "Send query from WIDGETS to mairix binary."
   (mairix-search
    (mairix-widget-make-query-from-widgets widgets)
-   (if (widget-value (cadr (assoc "Threads" widgets)))
-       t
-     -1))
+   (if (widget-value (cadr (assoc "Threads" widgets))) t))
   (kill-buffer mairix-customize-query-buffer))
 
 (defun mairix-widget-save-search (widgets)
--- a/lisp/nxml/nxml-mode.el	Fri Jan 15 14:21:59 2010 +0000
+++ b/lisp/nxml/nxml-mode.el	Sun Jan 17 00:12:59 2010 +0000
@@ -882,16 +882,17 @@
 (defun nxml-extend-after-change-region (start end pre-change-length)
   (unless nxml-degraded
     (setq nxml-last-fontify-end nil)
-
-    (nxml-with-degradation-on-error 'nxml-extend-after-change-region
-	(save-excursion
-	  (save-restriction
-	    (widen)
-	    (save-match-data
-	      (nxml-with-invisible-motion
-		(nxml-with-unmodifying-text-property-changes
-                  (nxml-extend-after-change-region1
-                   start end pre-change-length)))))))))
+    (let ((region (nxml-with-degradation-on-error
+		   'nxml-extend-after-change-region
+		   (save-excursion
+		     (save-restriction
+		       (widen)
+		       (save-match-data
+			 (nxml-with-invisible-motion
+			   (nxml-with-unmodifying-text-property-changes
+			     (nxml-extend-after-change-region1
+			      start end pre-change-length)))))))))
+      (if (consp region) region))))
 
 (defun nxml-extend-after-change-region1 (start end pre-change-length)
   (let* ((region (nxml-after-change1 start end pre-change-length))
--- a/lisp/pcmpl-unix.el	Fri Jan 15 14:21:59 2010 +0000
+++ b/lisp/pcmpl-unix.el	Sun Jan 17 00:12:59 2010 +0000
@@ -85,7 +85,10 @@
   (while (pcomplete-here (funcall pcomplete-command-completion-function))))
 
 (defun pcmpl-unix-read-passwd-file (file)
-  "Return an alist correlating gids to group names in FILE."
+  "Return an alist correlating gids to group names in FILE.
+
+If FILE is in hashed format (as described in the OpenSSH
+documentation), this function returns nil."
   (let (names)
     (when (file-readable-p file)
       (with-temp-buffer
--- a/lisp/startup.el	Fri Jan 15 14:21:59 2010 +0000
+++ b/lisp/startup.el	Sun Jan 17 00:12:59 2010 +0000
@@ -758,7 +758,8 @@
       (pop args)))
 
   (let ((done nil)
-	(args (cdr command-line-args)))
+	(args (cdr command-line-args))
+	display-arg)
 
     ;; Figure out which user's init file to load,
     ;; either from the environment or from the options.
@@ -794,6 +795,11 @@
 		(setq argval nil
                       argi orig-argi)))))
 	(cond
+	 ;; The --display arg is handled partly in C, partly in Lisp.
+	 ;; When it shows up here, we just put it back to be handled
+	 ;; by `command-line-1'.
+	 ((member argi '("-d" "-display"))
+	  (setq display-arg (list argi (pop args))))
 	 ((member argi '("-Q" "-quick"))
 	  (setq init-file-user nil
 		site-run-file nil
@@ -813,8 +819,6 @@
 	  (setq init-file-debug t))
 	 ((equal argi "-iconic")
 	  (push '(visibility . icon) initial-frame-alist))
-	 ((member argi '("-icon-type" "-i" "-itype"))
-	  (push '(icon-type . t) default-frame-alist))
 	 ((member argi '("-nbc" "-no-blinking-cursor"))
 	  (setq no-blinking-cursor t))
 	 ;; Push the popped arg back on the list of arguments.
@@ -825,6 +829,9 @@
 	(and argval
 	     (error "Option `%s' doesn't allow an argument" argi))))
 
+    ;; Re-attach the --display arg.
+    (and display-arg (setq args (append display-arg args)))
+
     ;; Re-attach the program name to the front of the arg list.
     (and command-line-args
          (setcdr command-line-args args)))
--- a/lisp/textmodes/artist.el	Fri Jan 15 14:21:59 2010 +0000
+++ b/lisp/textmodes/artist.el	Sun Jan 17 00:12:59 2010 +0000
@@ -1477,7 +1477,7 @@
 ;
 
 (defun artist-compute-popup-menu-table (menu-table)
-  "Create a menu from from MENU-TABLE data.
+  "Create a menu from MENU-TABLE data.
 The returned value is suitable for the `x-popup-menu' function."
   (cons "Artist menu"
 	(artist-compute-popup-menu-table-sub menu-table)))
--- a/lisp/vc-dispatcher.el	Fri Jan 15 14:21:59 2010 +0000
+++ b/lisp/vc-dispatcher.el	Sun Jan 17 00:12:59 2010 +0000
@@ -320,11 +320,14 @@
 	  (setq squeezed (nconc squeezed files)))
 	(let ((exec-path (append vc-path exec-path))
 	      ;; Add vc-path to PATH for the execution of this command.
+	      ;; Also, since some functions need to parse the output
+	      ;; from external commands, set LC_MESSAGES to C.
 	      (process-environment
 	       (cons (concat "PATH=" (getenv "PATH")
 			     path-separator
 			     (mapconcat 'identity vc-path path-separator))
-		     process-environment))
+		     (cons "LC_MESSAGES=C"
+			   process-environment)))
 	      (w32-quote-process-args t))
 	  (if (eq okstatus 'async)
 	      ;; Run asynchronously.
--- a/src/ChangeLog	Fri Jan 15 14:21:59 2010 +0000
+++ b/src/ChangeLog	Sun Jan 17 00:12:59 2010 +0000
@@ -1,3 +1,31 @@
+2010-01-16  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+	* xterm.c (event_handler_gdk): Block input (Bug#5037).
+
+2010-01-16  Chong Yidong  <cyd@stupidchicken.com>
+
+	* emacs.c (standard_args): Adjust arg priorities to reflect how
+	they are processed in startup.el.
+
+2010-01-16  Andreas Schwab  <schwab@linux-m68k.org>
+
+	* Makefile.in (lisp, shortlisp): Update.
+
+2010-01-16  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+	* xterm.c (x_term_init): Instead of inhibiting GC while running Lisp
+	code, link the new kboard into all_kboard before running Lisp code,
+	and protect the new terminal with GCPRO (Bug#5365).
+	(x_term_init): Remove unused var `atom'.
+	(x_delete_display, x_delete_terminal): Remove unused var `i'.
+
+2010-01-15  Jan Djärv  <jan.h.d@swipnet.se>
+
+	* xfns.c (x_get_current_desktop, x_get_desktop_workarea): New functions.
+	(Fx_create_frame): Call x_get_current_desktop and x_get_desktop_workarea
+	to find out usable size of the desktop.  Don't make frames larger than
+	this. Bug #3643.
+
 2010-01-15  Kenichi Handa  <handa@m17n.org>
 
 	* xdisp.c (CHAR_COMPOSED_P): New arg END_CHARPOS.  Callers changed.
--- a/src/Makefile.in	Fri Jan 15 14:21:59 2010 +0000
+++ b/src/Makefile.in	Sun Jan 17 00:12:59 2010 +0000
@@ -736,13 +736,13 @@
 	${lispsource}emacs-lisp/map-ynp.elc \
 	${lispsource}menu-bar.elc \
 	${lispsource}international/mule.elc \
-	${lispsource}international/mule-conf.el \
+	${lispsource}international/mule-conf.elc \
 	${lispsource}international/mule-cmds.elc \
 	${lispsource}international/characters.elc \
 	${lispsource}international/charprop.el \
 	${lispsource}case-table.elc \
-	${lispsource}language/chinese.el \
-	${lispsource}language/cyrillic.el \
+	${lispsource}language/chinese.elc \
+	${lispsource}language/cyrillic.elc \
 	${lispsource}language/indian.elc \
 	${lispsource}language/sinhala.el \
 	${lispsource}language/english.el \
@@ -760,7 +760,7 @@
 	${lispsource}language/tai-viet.el \
 	${lispsource}language/thai.el \
 	${lispsource}language/tibetan.elc \
-	${lispsource}language/vietnamese.el \
+	${lispsource}language/vietnamese.elc \
 	${lispsource}language/misc-lang.el \
 	${lispsource}language/utf-8-lang.el \
 	${lispsource}language/georgian.el \
@@ -829,12 +829,12 @@
 	../lisp/emacs-lisp/map-ynp.elc \
 	../lisp/env.elc \
 	../lisp/international/mule.elc \
-	../lisp/international/mule-conf.el \
+	../lisp/international/mule-conf.elc \
 	../lisp/international/mule-cmds.elc \
 	../lisp/international/characters.elc \
 	../lisp/case-table.elc \
-	../lisp/language/chinese.el \
-	../lisp/language/cyrillic.el \
+	../lisp/language/chinese.elc \
+	../lisp/language/cyrillic.elc \
 	../lisp/language/indian.elc \
 	../lisp/language/sinhala.el \
 	../lisp/language/english.el \
@@ -852,7 +852,7 @@
 	../lisp/language/tai-viet.el \
 	../lisp/language/thai.el \
 	../lisp/language/tibetan.elc \
-	../lisp/language/vietnamese.el \
+	../lisp/language/vietnamese.elc \
 	../lisp/language/misc-lang.el \
 	../lisp/language/utf-8-lang.el \
 	../lisp/language/georgian.el \
--- a/src/emacs.c	Fri Jan 15 14:21:59 2010 +0000
+++ b/src/emacs.c	Sun Jan 17 00:12:59 2010 +0000
@@ -1869,7 +1869,7 @@
   /* -d must come last before the options handled in startup.el.  */
   { "-d", "--display", 60, 1 },
   { "-display", 0, 60, 1 },
-  /* Now for the options handled in startup.el.  */
+  /* Now for the options handled in `command-line' (startup.el).  */
   { "-Q", "--quick", 55, 0 },
   { "-quick", 0, 55, 0 },
   { "-q", "--no-init-file", 50, 0 },
@@ -1878,10 +1878,12 @@
   { "-u", "--user", 30, 1 },
   { "-user", 0, 30, 1 },
   { "-debug-init", "--debug-init", 20, 0 },
-  { "-nbi", "--no-bitmap-icon", 15, 0 },
   { "-iconic", "--iconic", 15, 0 },
   { "-D", "--basic-display", 12, 0},
   { "-basic-display", 0, 12, 0},
+  { "-nbc", "--no-blinking-cursor", 12, 0 },
+  /* Now for the options handled in `command-line-1' (startup.el).  */
+  { "-nbi", "--no-bitmap-icon", 10, 0 },
   { "-bg", "--background-color", 10, 1 },
   { "-background", 0, 10, 1 },
   { "-fg", "--foreground-color", 10, 1 },
@@ -1891,7 +1893,6 @@
   { "-ib", "--internal-border", 10, 1 },
   { "-ms", "--mouse-color", 10, 1 },
   { "-cr", "--cursor-color", 10, 1 },
-  { "-nbc", "--no-blinking-cursor", 10, 0 },
   { "-fn", "--font", 10, 1 },
   { "-font", 0, 10, 1 },
   { "-fs", "--fullscreen", 10, 0 },
--- a/src/xdisp.c	Fri Jan 15 14:21:59 2010 +0000
+++ b/src/xdisp.c	Sun Jan 17 00:12:59 2010 +0000
@@ -1,7 +1,8 @@
 /* Display generation from window structure and buffer text.
    Copyright (C) 1985, 1986, 1987, 1988, 1993, 1994, 1995,
                  1997, 1998, 1999, 2000, 2001, 2002, 2003,
-                 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
+                 2004, 2005, 2006, 2007, 2008, 2009, 2010
+                 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
--- a/src/xfns.c	Fri Jan 15 14:21:59 2010 +0000
+++ b/src/xfns.c	Sun Jan 17 00:12:59 2010 +0000
@@ -3145,6 +3145,91 @@
   return Qnil;
 }
 
+/* Return current desktop index for the display where frame F is.
+   If we can't find out the current desktop, return 0.  */
+
+static int
+x_get_current_desktop (f)
+     struct frame *f;
+{
+  Atom actual_type;
+  unsigned long actual_size, bytes_remaining;
+  int rc, actual_format;
+  struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f);
+  long max_len = 10;
+  Display *dpy = FRAME_X_DISPLAY (f);
+  long *data = NULL;
+  int current_desktop;
+
+  BLOCK_INPUT;
+  x_catch_errors (dpy);
+  rc = XGetWindowProperty (dpy, dpyinfo->root_window,
+                           XInternAtom (dpy, "_NET_CURRENT_DESKTOP", False),
+                           0, max_len, False, XA_CARDINAL,
+                           &actual_type, &actual_format, &actual_size,
+                           &bytes_remaining, (unsigned char **)&data);
+
+  if (rc != Success || actual_type != XA_CARDINAL || x_had_errors_p (dpy)
+      || actual_size == 0 || actual_format != 32)
+    current_desktop = 0;
+  else
+    current_desktop = (int)*data;
+
+  if (data) XFree (data);
+  x_uncatch_errors ();
+  UNBLOCK_INPUT;
+  return current_desktop;
+}
+
+/* Return current size for DESKTOP_INDEX on the display where frame F is.
+   If we can't find out the size, return 0, otherwise 1.  */
+
+static int
+x_get_desktop_workarea (f, desktop_index, deskw, deskh)
+     struct frame *f;
+     int desktop_index;
+     int *deskw, *deskh;
+{
+  Atom actual_type;
+  unsigned long actual_size, bytes_remaining;
+  int rc, actual_format;
+  struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f);
+  long max_len = 1000; /* This handles 250 desktops, who has that many?  */
+  Display *dpy = FRAME_X_DISPLAY (f);
+  long *data = NULL;
+  int retval;
+
+  BLOCK_INPUT;
+  x_catch_errors (dpy);
+  rc = XGetWindowProperty (dpy, dpyinfo->root_window,
+                           XInternAtom (dpy, "_NET_WORKAREA", False),
+                           0, max_len, False, XA_CARDINAL,
+                           &actual_type, &actual_format, &actual_size,
+                           &bytes_remaining, (unsigned char **)&data);
+
+  if (rc != Success || actual_type != XA_CARDINAL || x_had_errors_p (dpy)
+      || actual_size < 3 || actual_format != 32)
+    retval = 0;
+  else
+    {
+      int idx;
+      
+      if (actual_size == 4 /* Only one info for all desktops.  */
+          || desktop_index*4 > actual_size) /* destop_index out of range.  */
+        desktop_index = 0;
+
+      idx = desktop_index*4;
+      *deskw = data[idx+2] - data[idx];
+      *deskh = data[idx+3] - data[idx+1];
+      retval = 1;
+    }
+  
+  if (data) XFree (data);
+  x_uncatch_errors ();
+  UNBLOCK_INPUT;
+  return retval;
+}
+
 DEFUN ("x-create-frame", Fx_create_frame, Sx_create_frame,
        1, 1, 0,
        doc: /* Make a new X window, which is called a "frame" in Emacs terms.
@@ -3164,7 +3249,7 @@
   Lisp_Object name;
   int minibuffer_only = 0;
   long window_prompting = 0;
-  int width, height;
+  int width, height, deskw = -1, deskh = -1, current_desktop = -1;
   int count = SPECPDL_INDEX ();
   struct gcpro gcpro1, gcpro2, gcpro3, gcpro4;
   Lisp_Object display;
@@ -3440,6 +3525,12 @@
     {
       int ph = FRAME_TEXT_LINES_TO_PIXEL_HEIGHT (f, FRAME_LINES (f));
       int dph = DisplayHeight (FRAME_X_DISPLAY (f), FRAME_X_SCREEN_NUMBER (f));
+      /* Some desktops have fixed menus above and/or panels below.  Try to
+         figure out the usable size we have for emacs.  */
+      current_desktop = x_get_current_desktop (f);
+      x_get_desktop_workarea (f, current_desktop, &deskw, &deskh);
+      if (deskh > 0 && deskh < dph) dph = deskh;
+      
       if (ph > dph)
         {
           height = FRAME_PIXEL_HEIGHT_TO_TEXT_LINES (f, dph) -
@@ -3459,6 +3550,13 @@
     {
       int pw = FRAME_TEXT_COLS_TO_PIXEL_WIDTH (f, FRAME_COLS (f));
       int dpw = DisplayWidth (FRAME_X_DISPLAY (f), FRAME_X_SCREEN_NUMBER (f));
+      if (deskw == -1)
+        {
+          current_desktop = x_get_current_desktop (f);
+          x_get_desktop_workarea (f, current_desktop, &deskw, &deskh);
+        }
+      if (deskw > 0 && deskw < dpw) dpw = deskw;
+      
       if (pw > dpw)
         width = FRAME_PIXEL_WIDTH_TO_TEXT_COLS (f, dpw);
     }
--- a/src/xterm.c	Fri Jan 15 14:21:59 2010 +0000
+++ b/src/xterm.c	Sun Jan 17 00:12:59 2010 +0000
@@ -5797,6 +5797,7 @@
 {
   XEvent *xev = (XEvent *) gxev;
 
+  BLOCK_INPUT;
   if (current_count >= 0)
     {
       struct x_display_info *dpyinfo;
@@ -5807,23 +5808,27 @@
       /* Filter events for the current X input method.
          GTK calls XFilterEvent but not for key press and release,
          so we do it here.  */
-      if (xev->type == KeyPress || xev->type == KeyRelease)
-        if (dpyinfo && x_filter_event (dpyinfo, xev))
-          return GDK_FILTER_REMOVE;
+      if ((xev->type == KeyPress || xev->type == KeyRelease)
+	  && dpyinfo
+	  && x_filter_event (dpyinfo, xev))
+	{
+	  UNBLOCK_INPUT;
+	  return GDK_FILTER_REMOVE;
+	}
 #endif
 
       if (! dpyinfo)
         current_finish = X_EVENT_NORMAL;
       else
-	{
-	  current_count +=
-	    handle_one_xevent (dpyinfo, xev, &current_finish,
-			       current_hold_quit);
-	}
+	current_count +=
+	  handle_one_xevent (dpyinfo, xev, &current_finish,
+			     current_hold_quit);
     }
   else
     current_finish = x_dispatch_event (xev, xev->xany.display);
 
+  UNBLOCK_INPUT;
+
   if (current_finish == X_EVENT_GOTO_OUT || current_finish == X_EVENT_DROP)
     return GDK_FILTER_REMOVE;
 
@@ -9821,7 +9826,7 @@
 {
   Pixmap icon_pixmap, icon_mask;
 
-#ifndef USE_X_TOOLKIT
+#if !defined USE_X_TOOLKIT && !defined USE_GTK
   Window window = FRAME_OUTER_WINDOW (f);
 #endif
 
@@ -10076,7 +10081,6 @@
     int argc;
     char *argv[NUM_ARGV];
     char **argv2 = argv;
-    GdkAtom atom;
     guint id;
 #ifndef HAVE_GTK_MULTIDISPLAY
     if (!EQ (Vinitial_window_system, Qx))
@@ -10215,25 +10219,36 @@
 	terminal->kboard = (KBOARD *) xmalloc (sizeof (KBOARD));
 	init_kboard (terminal->kboard);
 	terminal->kboard->Vwindow_system = Qx;
+
+	/* Add the keyboard to the list before running Lisp code (via
+           Qvendor_specific_keysyms below), since these are not traced
+           via terminals but only through all_kboards.  */
+	terminal->kboard->next_kboard = all_kboards;
+	all_kboards = terminal->kboard;
+
 	if (!EQ (XSYMBOL (Qvendor_specific_keysyms)->function, Qunbound))
 	  {
 	    char *vendor = ServerVendor (dpy);
-	    /* Temporarily hide the partially initialized terminal,
-	       but make sure it doesn't get garbage collected.  */
-	    int count = inhibit_garbage_collection ();
+
+	    /* Protect terminal from GC before removing it from the
+	       list of terminals.  */
+	    struct gcpro gcpro1;
+	    Lisp_Object gcpro_term;
+	    XSETTERMINAL (gcpro_term, terminal);
+	    GCPRO1 (gcpro_term);
+
+	    /* Temporarily hide the partially initialized terminal.  */
 	    terminal_list = terminal->next_terminal;
 	    UNBLOCK_INPUT;
 	    terminal->kboard->Vsystem_key_alist
 	      = call1 (Qvendor_specific_keysyms,
 		       vendor ? build_string (vendor) : empty_unibyte_string);
 	    BLOCK_INPUT;
-	    unbind_to (count, Qnil);
 	    terminal->next_terminal = terminal_list;
  	    terminal_list = terminal;
+	    UNGCPRO;
 	  }
 
-	terminal->kboard->next_kboard = all_kboards;
-	all_kboards = terminal->kboard;
 	/* Don't let the initial kboard remain current longer than necessary.
 	   That would cause problems if a file loaded on startup tries to
 	   prompt in the mini-buffer.  */
@@ -10582,7 +10597,6 @@
 x_delete_display (dpyinfo)
      struct x_display_info *dpyinfo;
 {
-  int i;
   struct terminal *t;
 
   /* Close all frames and delete the generic struct terminal for this
@@ -10734,7 +10748,6 @@
 x_delete_terminal (struct terminal *terminal)
 {
   struct x_display_info *dpyinfo = terminal->display_info.x;
-  int i;
 
   /* Protect against recursive calls.  delete_frame in
      delete_terminal calls us back when it deletes our last frame.  */