diff options
Diffstat (limited to 'lisp')
32 files changed, 360 insertions, 141 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 9e08889ba6..741f4ff482 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,93 @@ +2010-01-17 Chong Yidong <[email protected]> + + * mail/sendmail.el (mail-yank-original): Set the mark if the + specified function for yanking does not do it. + +2010-01-17 Dan Nicolaescu <[email protected]> + + * vc.el (with-vc-properties): Deal with directory arguments. (Bug#5298) + + * vc-dir.el (vc-dir-resynch-file): Update the vc-dir header when + resyncing a directory. + +2010-01-17 Stephen Leake <[email protected]> + + * progmodes/ada-mode.el: Fix bug#1920, bug#5400. + (ada-ident-re): Delete ., allow multibyte characters. + (ada-goto-label-re): New; matches goto labels. + (ada-block-label-re): New; matches block labels. + (ada-label-re): New; matches both. + (ada-named-block-re): Deleted; callers changed to use + `ada-block-label-re' instead. + (ada-get-current-indent, ada-get-indent-noindent, ada-get-indent-loop): + Use `ada-block-label-re'. + (ada-indent-on-previous-lines): Improve handling of goto labels. + (ada-get-indent-block-start): Special-case block label. + (ada-get-indent-label): Split into `ada-indent-block-label' and + `ada-indent-goto-label'. + (ada-goto-stmt-start, ada-goto-next-non-ws): + Optionally ignore goto labels. + (ada-goto-next-word): Simplify. + (ada-indent-newline-indent-conditional): Insert newline before + trying to fix indentation; doc fix. + +2010-01-17 Jay Belanger <[email protected]> + + * calc/calc.el (calc-command-flags): Give it an initial value. + +2010-01-17 Glenn Morris <[email protected]> + + * cedet/semantic/idle.el (semantic-idle-work-for-one-buffer): Doc fix. + +2010-01-17 Juanma Barranquero <[email protected]> + + * cedet/semantic.el (semantic-mode): + * files.el (minibuffer-with-setup-hook): + * textmodes/artist.el (artist-mt, artist-key-undraw-continously) + (artist-key-draw-continously, artist-key-do-continously-continously) + (artist-key-set-point-continously, artist-mouse-draw-continously): + Fix typos in docstrings. + +2010-01-16 Lennart Borgman <[email protected]> + + * nxml/nxml-mode.el (nxml-extend-after-change-region): Never + return t (Bug#3898). + +2010-01-16 Frédéric Perrin <[email protected]> (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 <[email protected]> + + * pcmpl-unix.el (pcmpl-unix-read-passwd-file): Doc fix. + +2010-01-16 Chong Yidong <[email protected]> + + * 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 <[email protected]> + + * 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 <[email protected]> (tiny change) * net/mairix.el (mairix-widget-send-query): Send -1 instead of nil @@ -6,7 +96,7 @@ 2010-01-15 Kenichi Handa <[email protected]> * international/mule-cmds.el (canonicalize-coding-system-name): - Convert "msXXX", "ibmXXX", "windows-XXX" to "cpXXX". + Convert "msXXX", "ibmXXX", "windows-XXX" to "cpXXX" (Bug#5387). 2010-01-15 Glenn Morris <[email protected]> @@ -1473,7 +1563,7 @@ 2009-12-01 Dan Nicolaescu <[email protected]> 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 <[email protected]> (tiny change) diff --git a/lisp/calc/calc.el b/lisp/calc/calc.el index a3f95fc73e..2a6ec97ef5 100644 --- a/lisp/calc/calc.el +++ b/lisp/calc/calc.el @@ -1546,7 +1546,7 @@ See calc-keypad for details." (defvar calc-aborted-prefix nil) (defvar calc-start-time nil) -(defvar calc-command-flags) +(defvar calc-command-flags nil) (defvar calc-final-point-line) (defvar calc-final-point-column) ;;; Note that modifications to this function may break calc-pass-errors. diff --git a/lisp/cedet/ede/cpp-root.el b/lisp/cedet/ede/cpp-root.el index ec04dd57c7..1592c3c2f5 100644 --- a/lisp/cedet/ede/cpp-root.el +++ b/lisp/cedet/ede/cpp-root.el @@ -324,7 +324,7 @@ exist, it should return nil." ) ) "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 --git a/lisp/cedet/ede/files.el b/lisp/cedet/ede/files.el index bdb9268a03..2f86b76615 100644 --- a/lisp/cedet/ede/files.el +++ b/lisp/cedet/ede/files.el @@ -487,7 +487,7 @@ doesn't exist." (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 --git a/lisp/cedet/ede/proj-aux.el b/lisp/cedet/ede/proj-aux.el index 9011c62674..26bc9540e8 100644 --- a/lisp/cedet/ede/proj-aux.el +++ b/lisp/cedet/ede/proj-aux.el @@ -1,4 +1,4 @@ -;;; ede/proj-aux.el --- EDE Generic Project auxilliary file support +;;; ede/proj-aux.el --- EDE Generic Project auxiliary file support ;; Copyright (C) 1998, 1999, 2000, 2007, 2009, 2010 Free Software Foundation, Inc. diff --git a/lisp/cedet/ede/simple.el b/lisp/cedet/ede/simple.el index 64bf047736..e0a526e9ea 100644 --- a/lisp/cedet/ede/simple.el +++ b/lisp/cedet/ede/simple.el @@ -87,7 +87,7 @@ All directories need at least one target.") (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 --git a/lisp/cedet/semantic.el b/lisp/cedet/semantic.el index 108a8c4b29..0b311d9f24 100644 --- a/lisp/cedet/semantic.el +++ b/lisp/cedet/semantic.el @@ -1014,7 +1014,7 @@ Throw away all the old tags, and recreate the tag database." ;; The `semantic-mode' command, in conjuction with the ;; `semantic-default-submodes' variable, toggles Semantic's various -;; auxilliary minor modes. +;; auxiliary minor modes. (defvar semantic-load-system-cache-loaded nil "Non nil when the Semantic system caches have been loaded. @@ -1057,7 +1057,7 @@ With ARG, turn Semantic mode on if ARG is positive, off otherwise. In Semantic mode, Emacs parses the buffers you visit for their semantic content. This information is used by a variety of -auxilliary minor modes, listed in `semantic-default-submodes'; +auxiliary minor modes, listed in `semantic-default-submodes'; all the minor modes in this list are also enabled when you enable Semantic mode. @@ -1067,7 +1067,7 @@ Semantic mode. (if semantic-mode ;; Turn on Semantic mode (progn - ;; Enable all the global auxilliary minor modes in + ;; Enable all the global auxiliary minor modes in ;; `semantic-submode-list'. (dolist (mode semantic-submode-list) (if (memq mode semantic-default-submodes) diff --git a/lisp/cedet/semantic/complete.el b/lisp/cedet/semantic/complete.el index eed31e4c2a..fa9ebed926 100644 --- a/lisp/cedet/semantic/complete.el +++ b/lisp/cedet/semantic/complete.el @@ -192,7 +192,7 @@ Keeps STRINGS only in the history.") 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 @@ Return value can be: ;;; 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 @@ DO NOT CALL THIS IF THE INLINE COMPLETION ENGINE IS NOT ACTIVE." (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 --git a/lisp/cedet/semantic/db-el.el b/lisp/cedet/semantic/db-el.el index 865d775c7c..d46f727fca 100644 --- a/lisp/cedet/semantic/db-el.el +++ b/lisp/cedet/semantic/db-el.el @@ -107,7 +107,7 @@ For Emacs Lisp, creates a specialized table." (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 --git a/lisp/cedet/semantic/db-global.el b/lisp/cedet/semantic/db-global.el index aba045d64d..bfd97fc5a5 100644 --- a/lisp/cedet/semantic/db-global.el +++ b/lisp/cedet/semantic/db-global.el @@ -105,7 +105,7 @@ is not available for this directory." (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 --git a/lisp/cedet/semantic/db-javascript.el b/lisp/cedet/semantic/db-javascript.el index d99b60cc66..2e357e677e 100644 --- a/lisp/cedet/semantic/db-javascript.el +++ b/lisp/cedet/semantic/db-javascript.el @@ -145,7 +145,7 @@ Create one of our special tables that can act as an intermediary." (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 --git a/lisp/cedet/semantic/db.el b/lisp/cedet/semantic/db.el index 811bc985f3..3f638a212f 100644 --- a/lisp/cedet/semantic/db.el +++ b/lisp/cedet/semantic/db.el @@ -735,13 +735,13 @@ all files of any type." (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 --git a/lisp/cedet/semantic/decorate/include.el b/lisp/cedet/semantic/decorate/include.el index dec01336ae..94273dcfaf 100644 --- a/lisp/cedet/semantic/decorate/include.el +++ b/lisp/cedet/semantic/decorate/include.el @@ -461,7 +461,7 @@ wrap existing project code for Semantic's benifit. (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 --git a/lisp/cedet/semantic/idle.el b/lisp/cedet/semantic/idle.el index dddfaca0f8..bc314bb547 100644 --- a/lisp/cedet/semantic/idle.el +++ b/lisp/cedet/semantic/idle.el @@ -336,9 +336,9 @@ Disable to prevent lots of excessive parsing in idle time." (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." +Returns t if all processing succeeded." (with-current-buffer buffer (not (and ;; Just in case diff --git a/lisp/emacs-lisp/advice.el b/lisp/emacs-lisp/advice.el index 4652299141..bac24b6302 100644 --- a/lisp/emacs-lisp/advice.el +++ b/lisp/emacs-lisp/advice.el @@ -2422,16 +2422,28 @@ in that CLASS." ;;;###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 --git a/lisp/emacs-lisp/chart.el b/lisp/emacs-lisp/chart.el index f4c3bfa90a..4f01e54060 100644 --- a/lisp/emacs-lisp/chart.el +++ b/lisp/emacs-lisp/chart.el @@ -323,7 +323,7 @@ MARGIN, ZONE, START, and END specify restrictions in chart space." (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 --git a/lisp/emacs-lisp/cl-loaddefs.el b/lisp/emacs-lisp/cl-loaddefs.el index 0be2c64331..3beda28abf 100644 --- a/lisp/emacs-lisp/cl-loaddefs.el +++ b/lisp/emacs-lisp/cl-loaddefs.el @@ -282,7 +282,7 @@ Not documented ;;;;;; 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 @@ from ARGLIST using FUNC: (define-modify-macro incf (&optional (n 1)) +) (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 --git a/lisp/emacs-lisp/cl-macs.el b/lisp/emacs-lisp/cl-macs.el index 29bb752dbf..4e3b1fb72d 100644 --- a/lisp/emacs-lisp/cl-macs.el +++ b/lisp/emacs-lisp/cl-macs.el @@ -2191,11 +2191,21 @@ from ARGLIST using FUNC: (define-modify-macro incf (&optional (n 1)) +)" ;;;###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 --git a/lisp/emulation/edt.el b/lisp/emulation/edt.el index 40c7d887c2..2abde59af9 100644 --- a/lisp/emulation/edt.el +++ b/lisp/emulation/edt.el @@ -2107,7 +2107,7 @@ created." (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 --git a/lisp/files.el b/lisp/files.el index b665bd2534..99e818643d 100644 --- a/lisp/files.el +++ b/lisp/files.el @@ -1289,7 +1289,7 @@ BODY should use the minibuffer at most once. Recursive uses of the minibuffer are unaffected (FUN is not called additional times). -This macro actually adds an auxilliary function that calls FUN, +This macro actually adds an auxiliary function that calls FUN, rather than FUN itself, to `minibuffer-setup-hook'." (declare (indent 1) (debug t)) (let ((hook (make-symbol "setup-hook"))) diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog index 8e7ae00576..1c1c62bb1b 100644 --- a/lisp/gnus/ChangeLog +++ b/lisp/gnus/ChangeLog @@ -1,3 +1,17 @@ +2010-01-17 Chong Yidong <[email protected]> + + * message.el (message-mail): Just pass yank-action on to message-setup. + (message-setup): Handle (FUN . ARGS) form of yank-action. + (message-with-reply-buffer, message-widen-reply) + (message-yank-original): Handle non-buffer values of + message-reply-buffer (Bug#4080). + (message-setup-1): Prefer to save message-reply-buffer as a buffer. + +2010-01-17 Juanma Barranquero <[email protected]> + + * nnmairix.el (nnmairix-group-delete-recreate-this-group): + Fix typo in docstring. + 2010-01-08 Jason Rumney <[email protected]> * sieve-manage.el (sieve-manage-parse-capability-1): Loosely match OK diff --git a/lisp/gnus/message.el b/lisp/gnus/message.el index c0886c2051..7194813422 100644 --- a/lisp/gnus/message.el +++ b/lisp/gnus/message.el @@ -1139,6 +1139,8 @@ If stringp, use this; if non-nil, use no host name (user name only)." (string :tag "name") (sexp :tag "none" :format "%t" t))) +;; This can be the name of a buffer, or a cons cell (FUNCTION . ARGS) +;; for yanking the original buffer. (defvar message-reply-buffer nil) (defvar message-reply-headers nil "The headers of the current replied article. @@ -1997,7 +1999,7 @@ see `message-narrow-to-headers-or-head'." (defmacro message-with-reply-buffer (&rest forms) "Evaluate FORMS in the reply buffer, if it exists." - `(when (and message-reply-buffer + `(when (and (bufferp message-reply-buffer) (buffer-name message-reply-buffer)) (with-current-buffer message-reply-buffer ,@forms))) @@ -3179,7 +3181,7 @@ or in the synonym headers, defined by `message-header-synonyms'." "Widen the reply to include maximum recipients." (interactive) (let ((follow-to - (and message-reply-buffer + (and (bufferp message-reply-buffer) (buffer-name message-reply-buffer) (with-current-buffer message-reply-buffer (message-get-reply-headers t))))) @@ -3674,9 +3676,16 @@ Really top post? "))) (point-max))) (delete-region (message-goto-body) (point-max))) (set (make-local-variable 'message-cite-reply-above) nil))) - (delete-windows-on message-reply-buffer t) + (if (bufferp message-reply-buffer) + (delete-windows-on message-reply-buffer t)) (push-mark (save-excursion - (insert-buffer-substring message-reply-buffer) + (cond + ((bufferp message-reply-buffer) + (insert-buffer-substring message-reply-buffer)) + ((and (consp message-reply-buffer) + (functionp (car message-reply-buffer))) + (apply (car message-reply-buffer) + (cdr message-reply-buffer)))) (unless (bolp) (insert ?\n)) (point))) @@ -6251,14 +6260,14 @@ between beginning of field and beginning of line." nil mua))) -(defun message-setup (headers &optional replybuffer actions +;; YANK-ACTION, if non-nil, can be a buffer or a yank action of the +;; form (FUNCTION . ARGS). +(defun message-setup (headers &optional yank-action actions continue switch-function) (let ((mua (message-mail-user-agent)) - subject to field yank-action) + subject to field) (if (not (and message-this-is-mail mua)) - (message-setup-1 headers replybuffer actions) - (if replybuffer - (setq yank-action (list 'insert-buffer replybuffer))) + (message-setup-1 headers yank-action actions) (setq headers (copy-sequence headers)) (setq field (assq 'Subject headers)) (when field @@ -6275,7 +6284,11 @@ between beginning of field and beginning of line." (format "%s" (car item)) (cdr item))) headers) - continue switch-function yank-action actions))))) + continue switch-function + (if (bufferp yank-action) + (list 'insert-buffer yank-action) + yank-action) + actions))))) (defun message-headers-to-generate (headers included-headers excluded-headers) "Return a list that includes all headers from HEADERS. @@ -6302,12 +6315,16 @@ are not included." (push header result))) (nreverse result))) -(defun message-setup-1 (headers &optional replybuffer actions) +(defun message-setup-1 (headers &optional yank-action actions) (dolist (action actions) (condition-case nil (add-to-list 'message-send-actions `(apply ',(car action) ',(cdr action))))) - (setq message-reply-buffer replybuffer) + (setq message-reply-buffer + (if (and (consp yank-action) + (eq (car yank-action) 'insert-buffer)) + (nth 1 yank-action) + yank-action)) (goto-char (point-min)) ;; Insert all the headers. (mail-header-format @@ -6438,7 +6455,7 @@ OTHER-HEADERS is an alist of header/value pairs. CONTINUE says whether to continue editing a message already being composed. SWITCH-FUNCTION is a function used to switch to and display the mail buffer." (interactive) - (let ((message-this-is-mail t) replybuffer) + (let ((message-this-is-mail t)) (unless (message-mail-user-agent) (message-pop-to-buffer ;; Search for the existing message buffer if `continue' is non-nil. @@ -6449,15 +6466,11 @@ is a function used to switch to and display the mail buffer." message-generate-new-buffers))) (message-buffer-name "mail" to)) switch-function)) - ;; FIXME: message-mail should do something if YANK-ACTION is not - ;; insert-buffer. - (and (consp yank-action) (eq (car yank-action) 'insert-buffer) - (setq replybuffer (nth 1 yank-action))) (message-setup (nconc `((To . ,(or to "")) (Subject . ,(or subject ""))) (when other-headers other-headers)) - replybuffer send-actions continue switch-function) + yank-action send-actions continue switch-function) ;; FIXME: Should return nil if failure. t)) diff --git a/lisp/gnus/nnmairix.el b/lisp/gnus/nnmairix.el index 215b6d6072..e39149b996 100644 --- a/lisp/gnus/nnmairix.el +++ b/lisp/gnus/nnmairix.el @@ -1104,7 +1104,7 @@ with `nnmairix-mairix-update-options'." (defun nnmairix-group-delete-recreate-this-group () "Deletes and recreates group on the back end. -You can use this function on nnmairix groups which continously +You can use this function on nnmairix groups which continuously show wrong article counts." (interactive) (let* ((group (gnus-group-group-name)) diff --git a/lisp/mail/sendmail.el b/lisp/mail/sendmail.el index 7004133f58..da8fe85da8 100644 --- a/lisp/mail/sendmail.el +++ b/lisp/mail/sendmail.el @@ -1505,14 +1505,18 @@ and don't delete any header fields." (interactive "P") (if mail-reply-action (let ((start (point)) - (original mail-reply-action)) + (original mail-reply-action) + (omark (mark t))) (and (consp original) (eq (car original) 'insert-buffer) (setq original (nth 1 original))) (if (consp original) - (apply (car original) (cdr original)) - ;; If the original message is in another window in the same frame, - ;; delete that window to save screen space. - ;; t means don't alter other frames. + (progn + ;; Call yank function, and set the mark if it doesn't. + (apply (car original) (cdr original)) + (if (eq omark (mark t)) + (push-mark (point)))) + ;; If the original message is in another window in the same + ;; frame, delete that window to save space. (delete-windows-on original t) (with-no-warnings ;; We really want this to set mark. diff --git a/lisp/nxml/nxml-mode.el b/lisp/nxml/nxml-mode.el index 9fefd304b4..8bcde7a3a2 100644 --- a/lisp/nxml/nxml-mode.el +++ b/lisp/nxml/nxml-mode.el @@ -882,16 +882,17 @@ Called with `font-lock-beg' and `font-lock-end' dynamically bound." (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 --git a/lisp/pcmpl-unix.el b/lisp/pcmpl-unix.el index 546d4a2591..9282fe87b5 100644 --- a/lisp/pcmpl-unix.el +++ b/lisp/pcmpl-unix.el @@ -85,7 +85,10 @@ with the SSH option \"HashKnownHosts no\"." (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 --git a/lisp/progmodes/ada-mode.el b/lisp/progmodes/ada-mode.el index 2b94fdb25f..03fec1beb7 100644 --- a/lisp/progmodes/ada-mode.el +++ b/lisp/progmodes/ada-mode.el @@ -590,8 +590,25 @@ This variable defines several rules to use to align different lines.") ;; FIXME: make this customizable (defconst ada-ident-re - "\\(\\sw\\|[_.]\\)+" - "Regexp matching Ada (qualified) identifiers.") + "[[:alpha:]]\\(?:[_[:alnum:]]\\)*" + ;; [:alnum:] matches any multibyte word constituent, as well as + ;; Latin-1 letters and numbers. This allows __ and trailing _; + ;; someone (emacs bug#1919) proposed [^\W_] to fix that, but \W does + ;; _not_ mean "not word constituent" inside a character alternative. + "Regexp matching an Ada identifier.") + +(defconst ada-goto-label-re + (concat "<<" ada-ident-re ">>") + "Regexp matching a goto label.") + +(defconst ada-block-label-re + (concat ada-ident-re "[ \t\n]*:[^=]") + "Regexp matching a block label. +Note that this also matches a variable declaration.") + +(defconst ada-label-re + (concat "\\(?:" ada-block-label-re "\\)\\|\\(?:" ada-goto-label-re "\\)") + "Regexp matching a goto or block label.") ;; "with" needs to be included in the regexp, to match generic subprogram parameters ;; Similarly, we put '[not] overriding' on the same line with 'procedure' etc. @@ -678,10 +695,6 @@ A new statement starts after these.") "protected" "task") t) "\\>")) "Regexp for the start of a subprogram.") -(defvar ada-named-block-re - "[ \t]*\\(\\sw\\|_\\)+[ \t]*:[^=]" - "Regexp of the name of a block or loop.") - (defvar ada-contextual-menu-on-identifier nil "Set to true when the right mouse button was clicked on an identifier.") @@ -2108,10 +2121,18 @@ Return the equivalent internal parameter list." (defun ada-indent-newline-indent-conditional () "Insert a newline and indent it. -The original line is indented first if `ada-indent-after-return' is non-nil." +The original line is re-indented if `ada-indent-after-return' is non-nil." (interactive "*") - (if ada-indent-after-return (ada-indent-current)) + ;; If at end of buffer (entering brand new code), some indentation + ;; fails. For example, a block label requires whitespace following + ;; the : to be recognized. So we do the newline first, then + ;; go back and indent the original line. (newline) + (if ada-indent-after-return + (progn + (forward-char -1) + (ada-indent-current) + (forward-char 1))) (ada-indent-current)) (defun ada-justified-indent-current () @@ -2335,8 +2356,8 @@ and the offset." (progn (goto-char (car match-cons)) (save-excursion - (beginning-of-line) - (if (looking-at ada-named-block-re) + (back-to-indentation) + (if (looking-at ada-block-label-re) (setq label (- ada-label-indent)))))))) ;; found 'record' => @@ -2648,8 +2669,9 @@ and the offset." ;; label ;;--------------------------------- - ((looking-at "\\(\\sw\\|_\\)+[ \t\n]*:[^=]") + ((looking-at ada-label-re) (if (ada-in-decl-p) + ;; ada-block-label-re matches variable declarations (ada-indent-on-previous-lines nil orgpoint orgpoint) (append (ada-indent-on-previous-lines nil orgpoint orgpoint) '(ada-label-indent)))) @@ -2674,9 +2696,10 @@ if INITIAL-POS is non-nil, moves point to INITIAL-POS before calculation." (if (ada-in-paramlist-p) (ada-get-indent-paramlist) - ;; move to beginning of current statement + ;; Move to beginning of current statement. If already at a + ;; statement start, move to beginning of enclosing statement. (unless nomove - (ada-goto-stmt-start)) + (ada-goto-stmt-start t)) ;; no beginning found => don't change indentation (if (and (eq oldpoint (point)) @@ -2702,6 +2725,12 @@ if INITIAL-POS is non-nil, moves point to INITIAL-POS before calculation." ((looking-at ada-block-start-re) (ada-get-indent-block-start orgpoint)) ;; + ((looking-at ada-block-label-re) ; also variable declaration + (ada-get-indent-block-label orgpoint)) + ;; + ((looking-at ada-goto-label-re) + (ada-get-indent-goto-label orgpoint)) + ;; ((looking-at "\\(sub\\)?type\\>") (ada-get-indent-type orgpoint)) ;; @@ -2717,17 +2746,8 @@ if INITIAL-POS is non-nil, moves point to INITIAL-POS before calculation." ((looking-at "when\\>") (ada-get-indent-when orgpoint)) ;; - ((looking-at "\\(\\sw\\|_\\)+[ \t\n]*:[^=]") - (ada-get-indent-label orgpoint)) - ;; ((looking-at "separate\\>") (ada-get-indent-nochange)) - - ;; A label - ((looking-at "<<") - (list (+ (save-excursion (back-to-indentation) (point)) - (- ada-label-indent)))) - ;; ((looking-at "with\\>\\|use\\>") ;; Are we still in that statement, or are we in fact looking at @@ -2960,6 +2980,10 @@ ORGPOINT is the limit position used in the calculation." (car (ada-search-ignore-string-comment "\\<type\\>" t))) 'ada-indent))) + ;; Special case for label: + ((looking-at ada-block-label-re) + (list (- (save-excursion (back-to-indentation) (point)) ada-label-indent) 'ada-indent)) + ;; nothing follows the block-start (t (list (save-excursion (back-to-indentation) (point)) 'ada-indent))))) @@ -3055,10 +3079,10 @@ ORGPOINT is the limit position used in the calculation." (list (save-excursion (back-to-indentation) (point)) 'ada-broken-decl-indent)) - ;; This one is called in every over case when indenting a line at the + ;; This one is called in every other case when indenting a line at the ;; top level (t - (if (looking-at ada-named-block-re) + (if (looking-at (concat "[ \t]*" ada-block-label-re)) (setq label (- ada-label-indent)) (let (p) @@ -3087,7 +3111,7 @@ ORGPOINT is the limit position used in the calculation." (list (+ (save-excursion (back-to-indentation) (point)) label) 'ada-broken-indent))))))) -(defun ada-get-indent-label (orgpoint) +(defun ada-get-indent-block-label (orgpoint) "Calculate the indentation when before a label or variable declaration. ORGPOINT is the limit position used in the calculation." (let ((match-cons nil) @@ -3119,6 +3143,16 @@ ORGPOINT is the limit position used in the calculation." (t (list cur-indent '(- ada-label-indent)))))) +(defun ada-get-indent-goto-label (orgpoint) + "Calculate the indentation when at a goto label." + (search-forward ">>") + (ada-goto-next-non-ws) + (if (>= (point) orgpoint) + ;; labeled statement is the one we need to indent + (list (- (point) ada-label-indent)) + ;; else indentation is indent for labeled statement + (ada-indent-on-previous-lines t orgpoint))) + (defun ada-get-indent-loop (orgpoint) "Calculate the indentation when just before a loop or a for ... use. ORGPOINT is the limit position used in the calculation." @@ -3127,8 +3161,8 @@ ORGPOINT is the limit position used in the calculation." ;; If looking at a named block, skip the label (label (save-excursion - (beginning-of-line) - (if (looking-at ada-named-block-re) + (back-to-indentation) + (if (looking-at ada-block-label-re) (- ada-label-indent) 0)))) @@ -3286,7 +3320,7 @@ ORGPOINT is the limit position used in the calculation." ;; -- searching and matching ;; ----------------------------------------------------------- -(defun ada-goto-stmt-start () +(defun ada-goto-stmt-start (&optional ignore-goto-label) "Move point to the beginning of the statement that point is in or after. Return the new position of point. As a special case, if we are looking at a closing parenthesis, skip to the @@ -3304,7 +3338,7 @@ open parenthesis." (progn (unless (save-excursion (goto-char (cdr match-dat)) - (ada-goto-next-non-ws orgpoint)) + (ada-goto-next-non-ws orgpoint ignore-goto-label)) ;; ;; nothing follows => it's the end-statement directly in ;; front of point => search again @@ -3326,7 +3360,7 @@ open parenthesis." (goto-char (point-min)) ;; ;; skip to the very first statement, if there is one - ;; + ;; (unless (ada-goto-next-non-ws orgpoint) (goto-char orgpoint)))) (point))) @@ -3388,18 +3422,25 @@ is the end of the match." nil))) -(defun ada-goto-next-non-ws (&optional limit) - "Skip white spaces, newlines and comments to next non-ws character. +(defun ada-goto-next-non-ws (&optional limit skip-goto-label) + "Skip to next non-whitespace character. +Skips spaces, newlines and comments, and possibly goto labels. +Return `point' if moved, nil if not. Stop the search at LIMIT. Do not call this function from within a string." (unless limit (setq limit (point-max))) (while (and (<= (point) limit) - (progn (forward-comment 10000) - (if (and (not (eobp)) - (save-excursion (forward-char 1) - (ada-in-string-p))) - (progn (forward-sexp 1) t))))) + (or (progn (forward-comment 10000) + (if (and (not (eobp)) + (save-excursion (forward-char 1) + (ada-in-string-p))) + (progn (forward-sexp 1) t))) + (and skip-goto-label + (looking-at ada-goto-label-re) + (progn + (goto-char (match-end 0)) + t))))) (if (< (point) limit) (point) nil) @@ -3426,9 +3467,7 @@ Return the new position of point or nil if not found." (unless backward (skip-syntax-forward "w")) (if (setq match-cons - (if backward - (ada-search-ignore-string-comment "\\w" t nil t) - (ada-search-ignore-string-comment "\\w" nil nil t))) + (ada-search-ignore-string-comment "\\w" backward nil t)) ;; ;; move to the beginning of the word found ;; diff --git a/lisp/startup.el b/lisp/startup.el index 9de08852ae..857ad97e44 100644 --- a/lisp/startup.el +++ b/lisp/startup.el @@ -758,7 +758,8 @@ opening the first frame (e.g. open a connection to an X server).") (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 @@ opening the first frame (e.g. open a connection to an X server).") (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 @@ opening the first frame (e.g. open a connection to an X server).") (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 @@ opening the first frame (e.g. open a connection to an X server).") (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 --git a/lisp/textmodes/artist.el b/lisp/textmodes/artist.el index 00896be3c6..66d831968d 100644 --- a/lisp/textmodes/artist.el +++ b/lisp/textmodes/artist.el @@ -870,7 +870,7 @@ EXIT-FN is, if non-nil, a function that is called after filling is done. Arguments and return values for this funcion are described below. DRAW-HOW defines the kind of shape. The kinds of shapes are: - `artist-do-continously' -- Do drawing operation continously, + `artist-do-continously' -- Do drawing operation continuously, as long as the mouse button is held down. `artist-do-poly' -- Do drawing operation many times. 1 -- Do drawing operation only once. @@ -1477,7 +1477,7 @@ Keymap summary ; (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))) @@ -3879,8 +3879,8 @@ The 2-point shape SHAPE is drawn from X1, Y1 to X2, Y2." ;; (defun artist-key-undraw-continously (x y) - "Undraw current continous shape with point at X, Y." - ;; No undraw-info for continous shapes + "Undraw current continuous shape with point at X, Y." + ;; No undraw-info for continuous shapes nil) (defun artist-key-undraw-poly (x y) @@ -3937,7 +3937,7 @@ The 2-point shape SHAPE is drawn from X1, Y1 to X2, Y2." ;; user has released the button, so the timer will always be cancelled ;; at that point. (defun artist-key-draw-continously (x y) - "Draw current continous shape at X,Y." + "Draw current continuous shape at X,Y." (let ((draw-fn (artist-go-get-draw-fn-from-symbol artist-curr-go))) (setq artist-key-shape (artist-funcall draw-fn x y)))) @@ -4018,7 +4018,7 @@ Trimming here means removing white space at end of a line." ;; (defun artist-key-do-continously-continously (x y) - "Update current continous shape at X,Y." + "Update current continuous shape at X,Y." (let ((draw-fn (artist-go-get-draw-fn-from-symbol artist-curr-go))) (artist-funcall draw-fn x y))) @@ -4045,7 +4045,7 @@ Trimming here means removing white space at end of a line." (defun artist-key-do-continously-1point (x y) "Update current 1-point shape at X,Y." - ;; Nothing to do continously for operations + ;; Nothing to do continuously for operations ;; where we have only one input point nil) @@ -4094,8 +4094,8 @@ Trimming here means removing white space at end of a line." (defun artist-key-set-point-continously (x y) - "Set point for current continous shape at X,Y." - ;; Maybe set arrow-points for continous shapes + "Set point for current continuous shape at X,Y." + ;; Maybe set arrow-points for continuous shapes (let ((arrow-pred (artist-go-get-arrow-pred-from-symbol artist-curr-go)) (arrow-set-fn (artist-go-get-arrow-set-fn-from-symbol artist-curr-go)) (init-fn (artist-go-get-init-fn-from-symbol artist-curr-go)) @@ -4914,7 +4914,7 @@ If optional argument STATE is positive, turn borders on." (defun artist-mouse-draw-continously (ev) "Generic function for shapes that require 1 point as input. -Operation is done continously while the mouse button is hold down. +Operation is done continuously while the mouse button is hold down. The event, EV, is the mouse event." (let* ((unshifted (artist-go-get-symbol-shift artist-curr-go nil)) (shifted (artist-go-get-symbol-shift artist-curr-go t)) @@ -5395,8 +5395,8 @@ The event, EV, is the mouse event." ;; 1. If your new drawing mode falls into one of the following ;; categories, goto point 2, otherwise goto point 3. ;; -;; - Modes where the shapes are drawn continously, as long as -;; the mouse button is held down (continous modes). +;; - Modes where the shapes are drawn continuously, as long as +;; the mouse button is held down (continuous modes). ;; Example: the erase-char mode, the pen and pen-line modes. ;; ;; - Modes where the shape is made up of from 2 points to an @@ -5408,7 +5408,7 @@ The event, EV, is the mouse event." ;; Example: lines, rectangles ;; ;; - Modes where the shape is made up of 1 point (1-point -;; modes). This mode differs from the continous modes in +;; modes). This mode differs from the continuous modes in ;; that the shape is drawn only once when the mouse button ;; is pressed. ;; Examples: paste, a flood-fill, vaporize modes @@ -5426,7 +5426,7 @@ The event, EV, is the mouse event." ;; For each of the cases below, the arguments given to the init-fn, ;; prep-fill-fn, arrow-set-fn and exit-fn are stated. ;; -;; If your mode matches the continous mode or the 1-point mode: +;; If your mode matches the continuous mode or the 1-point mode: ;; ;; a. Create a draw-function that draws your shape. Your function ;; must take x and y as arguments. The return value is not @@ -5538,8 +5538,8 @@ The event, EV, is the mouse event." ;; - artist-key-set-point-xxx for setting a point in the ;; mode, to be called from `artist-key-set-point-common'. ;; -;; - artist-key-do-continously-xxx to be called from -;; `artist-key-do-continously-common' whenever the user +;; - artist-key-do-continuously-xxx to be called from +;; `artist-key-do-continuously-common' whenever the user ;; moves around. ;; ;; As for the artist-mouse-draw-xxx, these two functions must diff --git a/lisp/vc-dir.el b/lisp/vc-dir.el index 575a64c1f8..2f661e8bec 100644 --- a/lisp/vc-dir.el +++ b/lisp/vc-dir.el @@ -874,7 +874,10 @@ If it is a file, return the corresponding cons for the file itself." (let ((ddir default-directory)) (when (vc-string-prefix-p ddir file) (if (file-directory-p file) - (vc-dir-resync-directory-files file) + (progn + (vc-dir-resync-directory-files file) + (ewoc-set-hf vc-ewoc + (vc-dir-headers vc-dir-backend default-directory) "")) (let ((state (vc-dir-recompute-file-state file ddir))) (vc-dir-update (list state) diff --git a/lisp/vc-dispatcher.el b/lisp/vc-dispatcher.el index 310cc3dc35..40223c9010 100644 --- a/lisp/vc-dispatcher.el +++ b/lisp/vc-dispatcher.el @@ -320,11 +320,14 @@ case, and the process object in the asynchronous case." (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 --git a/lisp/vc.el b/lisp/vc.el index 3a0cf804e2..2ca36ef4e0 100644 --- a/lisp/vc.el +++ b/lisp/vc.el @@ -791,13 +791,23 @@ in their implementation of vc-BACKEND-diff.") (defmacro with-vc-properties (files form settings) "Execute FORM, then maybe set per-file properties for FILES. +If any of FILES is actually a directory, then do the same for all +buffers for files in that directory. SETTINGS is an association list of property/value pairs. After executing FORM, set those properties from SETTINGS that have not yet been updated to their corresponding values." (declare (debug t)) - `(let ((vc-touched-properties (list t))) - ,form + `(let ((vc-touched-properties (list t)) + (flist nil)) (dolist (file ,files) + (if (file-directory-p file) + (dolist (buffer (buffer-list)) + (let ((fname (buffer-file-name buffer))) + (when (and fname (vc-string-prefix-p file fname)) + (push fname flist)))) + (push file flist))) + ,form + (dolist (file flist) (dolist (setting ,settings) (let ((property (car setting))) (unless (memq property vc-touched-properties) |