# HG changeset patch # User Katsumi Yamaoka # Date 1263687179 0 # Node ID 1789ed4b257eef0be5798fd50e7b30e6811978f4 # Parent c5b62c5789d88d895b376cca8334e4718df94286# Parent 8357132d4077aa2ebce47a9d2a70b73d9a0f366e Merge from mainline. diff -r c5b62c5789d8 -r 1789ed4b257e admin/notes/commits --- /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 diff -r c5b62c5789d8 -r 1789ed4b257e admin/notes/cvslogs --- 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 diff -r c5b62c5789d8 -r 1789ed4b257e doc/misc/ChangeLog --- 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 + + * ede.texi (ede-target): + * org.texi (Refiling notes): Remove duplicated words. + 2010-01-04 Stefan Monnier * gnus.texi (Posting Styles): Use with-current-buffer. diff -r c5b62c5789d8 -r 1789ed4b257e doc/misc/ede.texi --- 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 diff -r c5b62c5789d8 -r 1789ed4b257e doc/misc/org.texi --- 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 diff -r c5b62c5789d8 -r 1789ed4b257e etc/ChangeLog --- 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 + + * srecode/doc-cpp.srt, srecode/doc-default.srt: + * srecode/doc-java.srt: Remove duplicated words. + 2010-01-14 Nick Roberts * etc/images/gud/recstart.xpm, etc/images/gud/recstop.xpm: diff -r c5b62c5789d8 -r 1789ed4b257e etc/srecode/doc-cpp.srt --- 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}} diff -r c5b62c5789d8 -r 1789ed4b257e etc/srecode/doc-default.srt --- 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}} ---- diff -r c5b62c5789d8 -r 1789ed4b257e etc/srecode/doc-java.srt --- 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}} diff -r c5b62c5789d8 -r 1789ed4b257e lib-src/etags.c --- 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. */ diff -r c5b62c5789d8 -r 1789ed4b257e lisp/ChangeLog --- 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 + + * nxml/nxml-mode.el (nxml-extend-after-change-region): Never + return t (Bug#3898). + +2010-01-16 Frédéric Perrin (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 + + * pcmpl-unix.el (pcmpl-unix-read-passwd-file): Doc fix. + +2010-01-16 Chong Yidong + + * 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 + + * 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 (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 * international/mule-cmds.el (canonicalize-coding-system-name): @@ -1468,7 +1513,7 @@ 2009-12-01 Dan Nicolaescu 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 (tiny change) diff -r c5b62c5789d8 -r 1789ed4b257e lisp/cedet/ede/cpp-root.el --- 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 ;; diff -r c5b62c5789d8 -r 1789ed4b257e lisp/cedet/ede/files.el --- 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)) diff -r c5b62c5789d8 -r 1789ed4b257e lisp/cedet/ede/simple.el --- 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." diff -r c5b62c5789d8 -r 1789ed4b257e lisp/cedet/semantic/complete.el --- 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 diff -r c5b62c5789d8 -r 1789ed4b257e lisp/cedet/semantic/db-el.el --- 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))) diff -r c5b62c5789d8 -r 1789ed4b257e lisp/cedet/semantic/db-global.el --- 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) diff -r c5b62c5789d8 -r 1789ed4b257e lisp/cedet/semantic/db-javascript.el --- 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))) diff -r c5b62c5789d8 -r 1789ed4b257e lisp/cedet/semantic/db.el --- 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)) diff -r c5b62c5789d8 -r 1789ed4b257e lisp/cedet/semantic/decorate/include.el --- 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: diff -r c5b62c5789d8 -r 1789ed4b257e lisp/cedet/semantic/idle.el --- 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 diff -r c5b62c5789d8 -r 1789ed4b257e lisp/emacs-lisp/advice.el --- 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 diff -r c5b62c5789d8 -r 1789ed4b257e lisp/emacs-lisp/chart.el --- 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))) diff -r c5b62c5789d8 -r 1789ed4b257e lisp/emacs-lisp/cl-loaddefs.el --- 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 diff -r c5b62c5789d8 -r 1789ed4b257e lisp/emacs-lisp/cl-macs.el --- 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) diff -r c5b62c5789d8 -r 1789ed4b257e lisp/emulation/edt.el --- 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 diff -r c5b62c5789d8 -r 1789ed4b257e lisp/net/mairix.el --- 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) diff -r c5b62c5789d8 -r 1789ed4b257e lisp/nxml/nxml-mode.el --- 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)) diff -r c5b62c5789d8 -r 1789ed4b257e lisp/pcmpl-unix.el --- 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 diff -r c5b62c5789d8 -r 1789ed4b257e lisp/startup.el --- 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))) diff -r c5b62c5789d8 -r 1789ed4b257e lisp/textmodes/artist.el --- 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))) diff -r c5b62c5789d8 -r 1789ed4b257e lisp/vc-dispatcher.el --- 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. diff -r c5b62c5789d8 -r 1789ed4b257e src/ChangeLog --- 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 + + * xterm.c (event_handler_gdk): Block input (Bug#5037). + +2010-01-16 Chong Yidong + + * emacs.c (standard_args): Adjust arg priorities to reflect how + they are processed in startup.el. + +2010-01-16 Andreas Schwab + + * Makefile.in (lisp, shortlisp): Update. + +2010-01-16 Stefan Monnier + + * 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 + + * 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 * xdisp.c (CHAR_COMPOSED_P): New arg END_CHARPOS. Callers changed. diff -r c5b62c5789d8 -r 1789ed4b257e src/Makefile.in --- 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 \ diff -r c5b62c5789d8 -r 1789ed4b257e src/emacs.c --- 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 }, diff -r c5b62c5789d8 -r 1789ed4b257e src/xdisp.c --- 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. diff -r c5b62c5789d8 -r 1789ed4b257e src/xfns.c --- 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); } diff -r c5b62c5789d8 -r 1789ed4b257e src/xterm.c --- 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, ¤t_finish, - current_hold_quit); - } + current_count += + handle_one_xevent (dpyinfo, xev, ¤t_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. */