# HG changeset patch # User Katsumi Yamaoka # Date 1270983181 0 # Node ID de8a1b891175d023cbd793fafee625e8221abbd0 # Parent 0346e41d1e53815c89f528f1f626d3dc87038e18# Parent ffe32691e3abc74310c1b9fd7d6820e38a8fe25a Merge from mainline. diff -r 0346e41d1e53 -r de8a1b891175 doc/misc/ChangeLog --- a/doc/misc/ChangeLog Fri Apr 09 12:36:12 2010 +0000 +++ b/doc/misc/ChangeLog Sun Apr 11 10:53:01 2010 +0000 @@ -1,3 +1,14 @@ +2010-04-10 Michael Albinus + + Synchronize with Tramp repository. + + * tramp.texi (Auto-save and Backup): Remove reference to Emacs 21. + (Frequently Asked Questions): Adapt supported (X)Emacs versions. Adapt + supported MS Windows versions. Remove obsolete URL. Use the $() + syntax, texi2dvi reports errors with the backquotes. + + * trampver.texi: Update release number. + 2010-04-01 Teodor Zlatanov * gnus.texi (Finding the News): Add pointers to the Server buffer diff -r 0346e41d1e53 -r de8a1b891175 doc/misc/tramp.texi Binary file doc/misc/tramp.texi has changed diff -r 0346e41d1e53 -r de8a1b891175 doc/misc/trampver.texi --- a/doc/misc/trampver.texi Fri Apr 09 12:36:12 2010 +0000 +++ b/doc/misc/trampver.texi Sun Apr 11 10:53:01 2010 +0000 @@ -2,14 +2,14 @@ @c texi/trampver.texi. Generated from trampver.texi.in by configure. @c This is part of the Emacs manual. -@c Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 -@c Free Software Foundation, Inc. +@c Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, +@c 2010 Free Software Foundation, Inc. @c See file doclicense.texi for copying conditions. @c In the Tramp CVS, the version number is auto-frobbed from @c configure.ac, so you should edit that file and run @c "autoconf && ./configure" to change the version number. -@set trampver 2.1.18-23.2 +@set trampver 2.1.19-pre @c Other flags from configuration @set instprefix /usr/local diff -r 0346e41d1e53 -r de8a1b891175 etc/NEWS --- a/etc/NEWS Fri Apr 09 12:36:12 2010 +0000 +++ b/etc/NEWS Sun Apr 11 10:53:01 2010 +0000 @@ -107,6 +107,10 @@ Author: NAME line will add "--author NAME" to the "bzr commit" command. +**** For Git, adding an +Author: NAME +line will add "--author NAME" to the "git commit" command. + **** For Hg, adding an Author: NAME line will add "--user NAME" to the "hg commit" command. diff -r 0346e41d1e53 -r de8a1b891175 lisp/ChangeLog --- a/lisp/ChangeLog Fri Apr 09 12:36:12 2010 +0000 +++ b/lisp/ChangeLog Sun Apr 11 10:53:01 2010 +0000 @@ -1,3 +1,81 @@ +2010-04-10 Jari Aalto + + * comint.el (comint-password-prompt-regexp): Use regexp-opt, and + recognize ssh-keygen prompt (Bug#2817). + +2010-04-10 Michael Albinus + + * net/tramp.el (tramp-do-copy-or-rename-file): Add progress reporter. + +2010-04-10 Michael Albinus + + Synchronize with Tramp repository. + + * net/tramp.el (tramp-completion-function-alist) + (tramp-file-name-regexp, tramp-chunksize) + (tramp-local-coding-commands, tramp-remote-coding-commands): Fix + docstring. + (tramp-remote-process-environment): Use `format' instead of + `concat'. + (tramp-handle-directory-files-and-attributes) + (tramp-get-remote-path): Use `copy-tree'. + (tramp-handle-file-name-all-completions): Backward/ XEmacs + compatibility: Use `completion-ignore-case' if + `read-file-name-completion-ignore-case' does not exist. + (tramp-do-copy-or-rename-file-directly): Do not use + `tramp-handle-file-remote-p'. + (tramp-do-copy-or-rename-file-out-of-band): Use + `tramp-compat-delete-directory'. + (tramp-do-copy-or-rename-file-out-of-band) + (tramp-compute-multi-hops, tramp-maybe-open-connection): Use + `format-spec-make'. + (tramp-find-foreign-file-name-handler) + (tramp-advice-make-auto-save-file-name) + (tramp-set-auto-save-file-modes): Remove superfluous check for + `stringp'. This is done inside `tramp-tramp-file-p'. + (tramp-debug-outline-regexp): New defconst. + (tramp-get-debug-buffer): Use it. + (tramp-check-for-regexp): Use (forward-line 1). + (tramp-set-auto-save-file-modes): Adapt version check. + + * net/tramp-compat.el (tramp-advice-file-expand-wildcards): Wrap + call of `featurep' for 2nd argument. + (tramp-compat-make-temp-file): Simplify fallback implementation. + (tramp-compat-copy-tree): Remove function. + (tramp-compat-delete-directory): Provide implementation for older + Emacsen. + + * net/tramp-fish.el (tramp-fish-handle-directory-files-and-attributes): + Do not use `tramp-fish-handle-file-attributes. + + * net/trampver.el: Update release number. + +2010-04-10 Glenn Morris + + * progmodes/compile.el (compilation-save-buffers-predicate): + Add missing :version tag. + +2010-04-09 Sam Steingold + + * progmodes/compile.el (compilation-save-buffers-predicate): + Remove the "autoload" cookie. + + * progmodes/bug-reference.el (turn-on-bug-reference-mode) + (turn-on-bug-reference-prog-mode): Remove, `bug-reference-mode' + and `bug-reference-prog-mode' can be used in hooks directly. + +2010-04-09 Dan Nicolaescu + + Add --author support to git commit. + * vc-git.el (vc-git-checkin): Pass extra-args to the commit command. + (vc-git-log-edit-mode): New minor mode. + (log-edit-mode, log-edit-extra-flags, log-edit-mode): New + declarations. + +2010-04-09 Eric Raymond + + * vc-hooks.el, vc-git.el: Improve documentation comments. + 2010-04-08 Stefan Monnier Fix some of the problems in defsubst* (bug#5728). diff -r 0346e41d1e53 -r de8a1b891175 lisp/comint.el --- a/lisp/comint.el Fri Apr 09 12:36:12 2010 +0000 +++ b/lisp/comint.el Sun Apr 11 10:53:01 2010 +0000 @@ -340,11 +340,17 @@ ;; Some implementations of passwd use "Password (again)" as the 2nd prompt. ;; Something called "perforce" uses "Enter password:". (defcustom comint-password-prompt-regexp - "\\(\\(Enter \\|[Oo]ld \\|[Nn]ew \\|'s \\|login \\|\ -Kerberos \\|CVS \\|UNIX \\| SMB \\|LDAP \\|\\[sudo] \\|^\\)\ -\[Pp]assword\\( (again)\\)?\\|\ -pass phrase\\|\\(Enter \\|Repeat \\|Bad \\)?[Pp]assphrase\\)\ -\\(?:, try again\\)?\\(?: for [^:]+\\)?:\\s *\\'" + (concat + "^\\(" + (regexp-opt + '("Enter" "Enter same" "Old" "old" "New" "new" "'s" "login" + "Kerberos" "CVS" "UNIX" " SMB" "LDAP" "[sudo]" "Repeat" "Bad")) + " +\\)?" + (regexp-opt + '("password" "Password" "passphrase" "Passphrase" + "pass phrase" "Pass phrase")) + "\\(?:\\(?:, try\\)? *again\\| (empty for no passphrase)\\| (again)\\)?\ +\\(?: for [^:]+\\)?:\\s *\\'") "Regexp matching prompts for passwords in the inferior process. This is used by `comint-watch-for-password-prompt'." :type 'regexp diff -r 0346e41d1e53 -r de8a1b891175 lisp/dired.el --- a/lisp/dired.el Fri Apr 09 12:36:12 2010 +0000 +++ b/lisp/dired.el Sun Apr 11 10:53:01 2010 +0000 @@ -3974,7 +3974,7 @@ ;;;*** ;;;### (autoloads (dired-do-relsymlink dired-jump) "dired-x" "dired-x.el" -;;;;;; "bb37ec379c0a523368794491b691fd8d") +;;;;;; "2f8d3d5a31b969b181e23c40d6bb16a0") ;;; Generated autoloads from dired-x.el (autoload 'dired-jump "dired-x" "\ diff -r 0346e41d1e53 -r de8a1b891175 lisp/emacs-lisp/cl-loaddefs.el --- a/lisp/emacs-lisp/cl-loaddefs.el Fri Apr 09 12:36:12 2010 +0000 +++ b/lisp/emacs-lisp/cl-loaddefs.el Sun Apr 11 10:53:01 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" "273ba25f4a116c61a464dbe55f1f8c63") +;;;;;; defmacro* defun* gentemp gensym) "cl-macs" "cl-macs.el" "7fad7dd60f2f96ba90432f885015d61b") ;;; Generated autoloads from cl-macs.el (autoload 'gensym "cl-macs" "\ diff -r 0346e41d1e53 -r de8a1b891175 lisp/net/tramp-compat.el --- a/lisp/net/tramp-compat.el Fri Apr 09 12:36:12 2010 +0000 +++ b/lisp/net/tramp-compat.el Sun Apr 11 10:53:01 2010 +0000 @@ -22,9 +22,9 @@ ;;; Commentary: -;; Tramp's main Emacs version for development is GNU Emacs 23. This -;; package provides compatibility functions for GNU Emacs 21, GNU -;; Emacs 22 and XEmacs 21.4+. +;; Tramp's main Emacs version for development is GNU Emacs 24. This +;; package provides compatibility functions for GNU Emacs 22, GNU +;; Emacs 23 and XEmacs 21.4+. ;;; Code: @@ -120,7 +120,7 @@ (tramp-file-name-handler 'file-remote-p file identification connected))))) - ;; `process-file' exists since Emacs 22. + ;; `process-file' does not exist in XEmacs. (unless (fboundp 'process-file) (defalias 'process-file (lambda (program &optional infile buffer display &rest args) @@ -154,7 +154,9 @@ ;; return the original filename if it can't expand anything. Let's ;; just hope that this doesn't break anything else. ;; It is not needed anymore since GNU Emacs 23.2. - (unless (or (featurep 'xemacs) (featurep 'files 'remote-wildcards)) + (unless (or (featurep 'xemacs) + ;; `featurep' has only one argument in XEmacs. + (funcall 'featurep 'files 'remote-wildcards)) (defadvice file-expand-wildcards (around tramp-advice-file-expand-wildcards activate) (let ((name (ad-get-arg 0))) @@ -211,10 +213,9 @@ "`temp-directory' is defined -- using /tmp.")) (file-name-as-directory "/tmp")))) -;; `make-temp-file' exists in Emacs only. The third parameter SUFFIX -;; has been introduced with Emacs 22. We try it, if it fails, we fall -;; back to `make-temp-name', creating the temporary file immediately -;; in order to avoid a security hole. +;; `make-temp-file' exists in Emacs only. On XEmacs, we use our own +;; implementation with `make-temp-name', creating the temporary file +;; immediately in order to avoid a security hole. (defsubst tramp-compat-make-temp-file (filename &optional dir-flag) "Create a temporary file (compat function). Add the extension of FILENAME, if existing." @@ -224,43 +225,34 @@ (tramp-compat-temporary-file-directory))) (extension (file-name-extension filename t)) result) - (condition-case nil + (if (fboundp 'make-temp-file) (setq result (funcall (symbol-function 'make-temp-file) prefix dir-flag extension)) - (error - ;; We use our own implementation, taken from files.el. - (while - (condition-case () - (progn - (setq result (concat (make-temp-name prefix) extension)) - (if dir-flag - (make-directory result) - (write-region - "" nil result nil 'silent nil - ;; 7th parameter is MUSTBENEW in Emacs, and - ;; CODING-SYSTEM in XEmacs. It is not a security - ;; hole in XEmacs if we cannot use this parameter, - ;; because XEmacs uses a user-specific - ;; subdirectory with 0700 permissions. - (when (not (featurep 'xemacs)) 'excl))) - nil) - (file-already-exists t)) - ;; The file was somehow created by someone else between - ;; `make-temp-name' and `write-region', let's try again. - nil))) + ;; We use our own implementation, taken from files.el. + (while + (condition-case () + (progn + (setq result (concat (make-temp-name prefix) extension)) + (if dir-flag + (make-directory result) + (write-region "" nil result nil 'silent)) + nil) + (file-already-exists t)) + ;; The file was somehow created by someone else between + ;; `make-temp-name' and `write-region', let's try again. + nil)) result)) -;; `most-positive-fixnum' arrived in Emacs 22. Before, and in XEmacs, -;; it is a fixed value. +;; `most-positive-fixnum' does not exist in XEmacs. (defsubst tramp-compat-most-positive-fixnum () "Return largest positive integer value (compat function)." (cond ((boundp 'most-positive-fixnum) (symbol-value 'most-positive-fixnum)) - ;; Default value in XEmacs and Emacs 21. + ;; Default value in XEmacs. (t 134217727))) -;; ID-FORMAT exists since Emacs 22. +;; ID-FORMAT does not exists in XEmacs. (defun tramp-compat-file-attributes (filename &optional id-format) "Like `file-attributes' for Tramp files (compat function)." (cond @@ -292,8 +284,8 @@ (funcall (symbol-function 'copy-directory) directory newname keep-time parents) - ;; If default-directory is a remote directory, make sure we find - ;; its copy-directory handler. + ;; If `default-directory' is a remote directory, make sure we find + ;; its `copy-directory' handler. (let ((handler (or (find-file-name-handler directory 'copy-directory) (find-file-name-handler newname 'copy-directory)))) (if handler @@ -325,32 +317,28 @@ (if keep-time (set-file-times newname (nth 5 (file-attributes directory)))))))) -;; `copy-tree' is a built-in function in XEmacs. In Emacs 21, it is -;; an autoloaded function in cl-extra.el. Since Emacs 22, it is part -;; of subr.el. There are problems when autoloading, therefore we test -;; for `subrp' and `symbol-file'. Implementation is taken from Emacs 23. -(defun tramp-compat-copy-tree (tree) - "Make a copy of TREE (compat function)." - (if (or (subrp 'copy-tree) (symbol-file 'copy-tree)) - (funcall (symbol-function 'copy-tree) tree) - (let (result) - (while (consp tree) - (let ((newcar (car tree))) - (if (consp (car tree)) - (setq newcar (tramp-compat-copy-tree (car tree)))) - (push newcar result)) - (setq tree (cdr tree))) - (nconc (nreverse result) tree)))) - ;; RECURSIVE has been introduced with Emacs 23.2. (defun tramp-compat-delete-directory (directory &optional recursive) "Like `delete-directory' for Tramp files (compat function)." - (if recursive - (funcall (symbol-function 'delete-directory) directory recursive) - (delete-directory directory))) + (if (null recursive) + (delete-directory directory) + (condition-case nil + (funcall (symbol-function 'delete-directory) directory recursive) + ;; This Emacs version does not support the RECURSIVE flag. We + ;; use the implementation from Emacs 23.2. + (error + (setq directory (directory-file-name (expand-file-name directory))) + (if (not (file-symlink-p directory)) + (mapc (lambda (file) + (if (eq t (car (file-attributes file))) + (tramp-compat-delete-directory file recursive) + (delete-file file))) + (directory-files + directory 'full "^\\([^.]\\|\\.\\([^.]\\|\\..\\)\\).*"))) + (delete-directory directory))))) -;; `number-sequence' has been introduced in Emacs 22. Implementation -;; is taken from Emacs 23. +;; `number-sequence' does not exist in XEmacs. Implementation is +;; taken from Emacs 23. (defun tramp-compat-number-sequence (from &optional to inc) "Return a sequence of numbers from FROM to TO as a list (compat function)." (if (or (subrp 'number-sequence) (symbol-file 'number-sequence)) diff -r 0346e41d1e53 -r de8a1b891175 lisp/net/tramp-fish.el --- a/lisp/net/tramp-fish.el Fri Apr 09 12:36:12 2010 +0000 +++ b/lisp/net/tramp-fish.el Sun Apr 11 10:53:01 2010 +0000 @@ -341,10 +341,10 @@ "Like `directory-files-and-attributes' for Tramp files." (mapcar (lambda (x) - ;; We cannot call `file-attributes' for backward compatibility reasons. - ;; Its optional parameter ID-FORMAT is introduced with Emacs 22. - (cons x (tramp-fish-handle-file-attributes - (if full x (expand-file-name x directory)) id-format))) + (cons x + (tramp-compat-file-attributes + (if full x (expand-file-name x directory)) + id-format))) (directory-files directory full match nosort))) (defun tramp-fish-handle-expand-file-name (name &optional dir) @@ -1030,15 +1030,15 @@ ;; last line ((looking-at "^$") (return))) - ;; delete line + ;; Delete line. (forward-line) (delete-region (point-min) (point)))) - ;; delete trailing empty line + ;; Delete trailing empty line. (forward-line) (delete-region (point-min) (point)) - ;; Return entry in file-attributes format + ;; Return entry in `file-attributes' format. (list localname link -1 uid gid '(0 0) mtime '(0 0) size mode nil))) (defun tramp-fish-retrieve-data (vec) diff -r 0346e41d1e53 -r de8a1b891175 lisp/net/tramp.el --- a/lisp/net/tramp.el Fri Apr 09 12:36:12 2010 +0000 +++ b/lisp/net/tramp.el Sun Apr 11 10:53:01 2010 +0000 @@ -36,7 +36,7 @@ ;; Notes: ;; ----- ;; -;; This package only works for Emacs 21.1 and higher, and for XEmacs 21.4 +;; This package only works for Emacs 22.1 and higher, and for XEmacs 21.4 ;; and higher. For XEmacs 21, you need the package `fsf-compat' for ;; the `with-timeout' macro. ;; @@ -79,7 +79,7 @@ (when (featurep 'tramp-compat) (unload-feature 'tramp-compat 'force)))) -(require 'format-spec) ; from Gnus 5.8, also in tar ball +(require 'format-spec) ;; As long as password.el is not part of (X)Emacs, it shouldn't ;; be mandatory (if (featurep 'xemacs) @@ -871,9 +871,9 @@ (defvar tramp-completion-function-alist nil "*Alist of methods for remote files. -This is a list of entries of the form (NAME PAIR1 PAIR2 ...). +This is a list of entries of the form \(NAME PAIR1 PAIR2 ...\). Each NAME stands for a remote access method. Each PAIR is of the form -\(FUNCTION FILE). FUNCTION is responsible to extract user names and host +\(FUNCTION FILE\). FUNCTION is responsible to extract user names and host names from FILE for completion. The following predefined FUNCTIONs exists: * `tramp-parse-rhosts' for \"~/.rhosts\" like files, @@ -1025,7 +1025,7 @@ (defcustom tramp-remote-process-environment `("HISTFILE=$HOME/.tramp_history" "HISTSIZE=1" "LC_ALL=C" - ,(concat "TERM=" tramp-terminal-type) + ,(format "TERM=%s" tramp-terminal-type) "EMACS=t" ;; Deprecated. ,(format "INSIDE_EMACS=%s,tramp:%s" emacs-version tramp-version) "CDPATH=" "HISTORY=" "MAIL=" "MAILCHECK=" "MAILPATH=" @@ -1429,14 +1429,14 @@ (t (error "Wrong `tramp-syntax' defined"))) "*Regular expression matching file names handled by Tramp. This regexp should match Tramp file names but no other file names. -\(When tramp.el is loaded, this regular expression is prepended to +When tramp.el is loaded, this regular expression is prepended to `file-name-handler-alist', and that is searched sequentially. Thus, if the Tramp entry appears rather early in the `file-name-handler-alist' and is a bit too general, then some files might be considered Tramp files which are not really Tramp files. Please note that the entry in `file-name-handler-alist' is made when -this file (tramp.el) is loaded. This means that this variable must be set +this file \(tramp.el\) is loaded. This means that this variable must be set before loading tramp.el. Alternatively, `file-name-handler-alist' can be updated after changing this variable. @@ -1566,18 +1566,18 @@ In the Emacs normally running Tramp, evaluate the above code \(replace \"xxx\" and \"yyy\" by the remote user and host name, -respectively). You can do this, for example, by pasting it into +respectively\). You can do this, for example, by pasting it into the `*scratch*' buffer and then hitting C-j with the cursor after the last closing parenthesis. Note that it works only if you have configured -\"ssh\" to run without password query, see ssh-agent(1). +\"ssh\" to run without password query, see ssh-agent\(1\). You will see the number of bytes sent successfully to the remote host. If that number exceeds 1000, you can stop the execution by hitting C-g, because your Emacs is likely clean. When it is necessary to set `tramp-chunksize', you might consider to -use an out-of-the-band method (like \"scp\") instead of an internal one -\(like \"ssh\"), because setting `tramp-chunksize' to non-nil decreases +use an out-of-the-band method \(like \"scp\"\) instead of an internal one +\(like \"ssh\"\), because setting `tramp-chunksize' to non-nil decreases performance. If your Emacs is buggy, the code stops and gives you an indication @@ -3166,7 +3166,7 @@ (when (file-directory-p directory) (setq directory (expand-file-name directory)) (let* ((temp - (tramp-compat-copy-tree + (copy-tree (with-parsed-tramp-file-name directory nil (with-file-property v localname @@ -3297,7 +3297,12 @@ (tramp-shell-quote-argument localname) (tramp-shell-quote-argument filename) (if (symbol-value - 'read-file-name-completion-ignore-case) + ;; `read-file-name-completion-ignore-case' + ;; is introduced with Emacs 22.1. + (if (boundp + 'read-file-name-completion-ignore-case) + 'read-file-name-completion-ignore-case + 'completion-ignore-case)) 1 0))) (format (concat @@ -3382,7 +3387,6 @@ "file-name-all-completions" result)))))))) -;; The following isn't needed for Emacs 20 but for 19.34? (defun tramp-handle-file-name-completion (filename directory &optional predicate) "Like `file-name-completion' for Tramp files." @@ -3520,7 +3524,8 @@ (unless (memq op '(copy rename)) (error "Unknown operation `%s', must be `copy' or `rename'" op)) (let ((t1 (tramp-tramp-file-p filename)) - (t2 (tramp-tramp-file-p newname))) + (t2 (tramp-tramp-file-p newname)) + pr tm) (when (and (not ok-if-already-exists) (file-exists-p newname)) (with-parsed-tramp-file-name (if t1 filename newname) nil @@ -3530,7 +3535,16 @@ (with-parsed-tramp-file-name (if t1 filename newname) nil (tramp-message v 0 "Transferring %s to %s..." filename newname)) - (prog1 + ;; We start a pulsing progress reporter. Introduced in Emacs 24.1. + (when (> (nth 7 (file-attributes filename)) tramp-copy-size-limit) + (condition-case nil + (setq pr (funcall + 'make-progress-reporter + (format "Transferring %s to %s..." filename newname)) + tm (run-at-time 0 0.1 'progress-reporter-update pr)) + (error nil))) + + (unwind-protect (cond ;; Both are Tramp files. ((and t1 t2) @@ -3600,6 +3614,8 @@ (tramp-flush-file-property v (file-name-directory localname)) (tramp-flush-file-property v localname))) + ;; Stop progress reporter. + (if tm (cancel-timer tm)) (with-parsed-tramp-file-name (if t1 filename newname) nil (tramp-message v 0 "Transferring %s to %s...done" filename newname))))) @@ -3650,9 +3666,13 @@ "Unknown operation `%s', must be `copy' or `rename'" op)))) (localname1 - (if t1 (tramp-handle-file-remote-p filename 'localname) filename)) + (if t1 + (tramp-file-name-handler 'file-remote-p filename 'localname) + filename)) (localname2 - (if t2 (tramp-handle-file-remote-p newname 'localname) newname)) + (if t2 + (tramp-file-name-handler 'file-remote-p newname 'localname) + newname)) (prefix (file-remote-p (if t1 filename newname))) cmd-result) @@ -3814,7 +3834,7 @@ ;; Save exit. (condition-case nil (if dir-flag - (delete-directory + (tramp-compat-delete-directory (expand-file-name ".." tmpfile) 'recursive) (delete-file tmpfile)) (error)))) @@ -3841,10 +3861,11 @@ port (or (and port (number-to-string port)) "")) ;; Compose copy command. - (setq spec `((?h . ,host) (?u . ,user) (?p . ,port) - (?t . ,(tramp-get-connection-property - (tramp-get-connection-process v) "temp-file" "")) - (?k . ,(if keep-date " " ""))) + (setq spec (format-spec-make + ?h host ?u user ?p port + ?t (tramp-get-connection-property + (tramp-get-connection-process v) "temp-file" "") + ?k (if keep-date " " "")) copy-program (tramp-get-method-parameter method 'tramp-copy-program) copy-keep-date (tramp-get-method-parameter @@ -3934,7 +3955,7 @@ (unless (eq op 'copy) (if (file-regular-p filename) (delete-file filename) - (delete-directory filename 'recursive)))))) + (tramp-compat-delete-directory filename 'recursive)))))) (defun tramp-handle-make-directory (dir &optional parents) "Like `make-directory' for Tramp files." @@ -4863,9 +4884,9 @@ "Like `find-backup-file-name' for Tramp files." (with-parsed-tramp-file-name filename nil ;; We set both variables. It doesn't matter whether it is - ;; Emacs or XEmacs + ;; Emacs or XEmacs. (let ((backup-directory-alist - ;; Emacs case + ;; Emacs case. (when (boundp 'backup-directory-alist) (if (symbol-value 'tramp-backup-directory-alist) (mapcar @@ -4881,7 +4902,7 @@ (symbol-value 'backup-directory-alist)))) (bkup-backup-directory-info - ;; XEmacs case + ;; XEmacs case. (when (boundp 'bkup-backup-directory-info) (if (symbol-value 'tramp-bkup-backup-directory-info) (mapcar @@ -5295,7 +5316,7 @@ "Return file name related to OPERATION file primitive. ARGS are the arguments OPERATION has been called with." (cond - ; FILE resp DIRECTORY + ;; FILE resp DIRECTORY. ((member operation (list 'access-file 'byte-compiler-base-file-name 'delete-directory 'delete-file 'diff-latest-backup-file 'directory-file-name @@ -5313,9 +5334,9 @@ 'load 'make-directory 'make-directory-internal 'set-file-modes 'substitute-in-file-name 'unhandled-file-name-directory 'vc-registered - ; Emacs 22 only + ;; Emacs 22+ only. 'set-file-times - ; XEmacs only + ;; XEmacs only. 'abbreviate-file-name 'create-file-buffer 'dired-file-modtime 'dired-make-compressed-filename 'dired-recursive-delete-directory 'dired-set-file-modtime @@ -5325,14 +5346,14 @@ (if (file-name-absolute-p (nth 0 args)) (nth 0 args) (expand-file-name (nth 0 args)))) - ; FILE DIRECTORY resp FILE1 FILE2 + ;; FILE DIRECTORY resp FILE1 FILE2. ((member operation (list 'add-name-to-file 'copy-file 'expand-file-name 'file-name-all-completions 'file-name-completion 'file-newer-than-file-p 'make-symbolic-link 'rename-file - ; Emacs 23 only + ;; Emacs 23+ only. 'copy-directory - ; XEmacs only + ;; XEmacs only. 'dired-make-relative-symlink 'vm-imap-move-mail 'vm-pop-move-mail 'vm-spool-move-mail)) (save-match-data @@ -5340,39 +5361,39 @@ ((string-match tramp-file-name-regexp (nth 0 args)) (nth 0 args)) ((string-match tramp-file-name-regexp (nth 1 args)) (nth 1 args)) (t (buffer-file-name (current-buffer)))))) - ; START END FILE + ;; START END FILE. ((eq operation 'write-region) (nth 2 args)) - ; BUF + ;; BUFFER. ((member operation (list 'set-visited-file-modtime 'verify-visited-file-modtime - ; since Emacs 22 only + ;; Emacs 22+ only. 'make-auto-save-file-name - ; XEmacs only + ;; XEmacs only. 'backup-buffer)) (buffer-file-name (if (bufferp (nth 0 args)) (nth 0 args) (current-buffer)))) - ; COMMAND + ;; COMMAND. ((member operation - (list ; not in Emacs 23 + (list ;; not in Emacs 23+. 'dired-call-process - ; Emacs only + ;; Emacs only. 'shell-command - ; since Emacs 22 only + ;; Emacs 22+ only. 'process-file - ; since Emacs 23 only + ;; Emacs 23+ only. 'start-file-process - ; XEmacs only + ;; XEmacs only. 'dired-print-file 'dired-shell-call-process - ; nowhere yet + ;; nowhere yet. 'executable-find 'start-process 'call-process)) default-directory) - ; unknown file primitive + ;; Unknown file primitive. (t (error "unknown file I/O primitive: %s" operation)))) (defun tramp-find-foreign-file-name-handler (filename) "Return foreign file name handler if exists." - (when (and (stringp filename) (tramp-tramp-file-p filename)) + (when (tramp-tramp-file-p filename) (let ((v (tramp-dissect-file-name filename t)) (handler tramp-foreign-file-name-handler-alist) elt res) @@ -6257,22 +6278,24 @@ (format "*debug tramp/%s %s@%s*" method user host) (format "*debug tramp/%s %s*" method host)))) +(defconst tramp-debug-outline-regexp + "[0-9]+:[0-9]+:[0-9]+\\.[0-9]+ [a-z0-9-]+ (\\([0-9]+\\)) #") + (defun tramp-get-debug-buffer (vec) "Get the debug buffer for VEC." (with-current-buffer (get-buffer-create (tramp-debug-buffer-name vec)) (when (bobp) (setq buffer-undo-list t) - ;; Activate outline-mode. This runs `text-mode-hook' and + ;; Activate `outline-mode'. This runs `text-mode-hook' and ;; `outline-mode-hook'. We must prevent that local processes - ;; die. Yes: I've seen `flyspell-mode', which starts "ispell" - ;; ... - (let ((default-directory (tramp-compat-temporary-file-directory))) + ;; die. Yes: I've seen `flyspell-mode', which starts "ispell". + ;; Furthermore, `outline-regexp' must have the correct value + ;; already, because it is used by `font-lock-compile-keywords'. + (let ((default-directory (tramp-compat-temporary-file-directory)) + (outline-regexp tramp-debug-outline-regexp)) (outline-mode)) - (set (make-local-variable 'outline-regexp) - "[0-9]+:[0-9]+:[0-9]+\\.[0-9]+ [a-z0-9-]+ (\\([0-9]+\\)) #") -; (set (make-local-variable 'outline-regexp) -; "[a-z.-]+:[0-9]+: [a-z0-9-]+ (\\([0-9]+\\)) #") + (set (make-local-variable 'outline-regexp) tramp-debug-outline-regexp) (set (make-local-variable 'outline-level) 'tramp-outline-level)) (current-buffer))) @@ -6307,7 +6330,7 @@ (setq result (concat "\\" progname)))) (unless result (when ignore-tilde - ;; Remove all ~/foo directories from dirlist. In Emacs 20, + ;; Remove all ~/foo directories from dirlist. In XEmacs, ;; `remove' is in CL, and we want to avoid CL dependencies. (let (newdl d) (while dirlist @@ -6624,7 +6647,7 @@ ;; Discard echo from remote output. (tramp-set-connection-property proc "check-remote-echo" nil) (tramp-message proc 5 "echo-mark found") - (forward-line) + (forward-line 1) (delete-region begin (point)) (goto-char (point-min))))) @@ -6895,7 +6918,7 @@ "List of local coding commands for inline transfer. Each item is a list that looks like this: -\(FORMAT ENCODING DECODING) +\(FORMAT ENCODING DECODING\) FORMAT is symbol describing the encoding/decoding format. It can be `b64' for base64 encoding, `uu' for uu encoding, or `pack' for simple packing. @@ -6928,7 +6951,7 @@ "List of remote coding commands for inline transfer. Each item is a list that looks like this: -\(FORMAT ENCODING DECODING) +\(FORMAT ENCODING DECODING\) FORMAT is symbol describing the encoding/decoding format. It can be `b64' for base64 encoding, `uu' for uu encoding, or `pack' for simple packing. @@ -7089,8 +7112,9 @@ (setq proxy (format-spec proxy - `((?u . ,(or (tramp-file-name-user (car target-alist)) "")) - (?h . ,(or (tramp-file-name-host (car target-alist)) ""))))) + (format-spec-make + ?u (or (tramp-file-name-user (car target-alist)) "") + ?h (or (tramp-file-name-host (car target-alist)) "")))) (with-parsed-tramp-file-name proxy l ;; Add the hop. (add-to-list 'target-alist l) @@ -7308,8 +7332,7 @@ l-host (or l-host "") l-user (or l-user "") l-port (or l-port "") - spec `((?h . ,l-host) (?u . ,l-user) (?p . ,l-port) - (?t . ,tmpfile)) + spec (format-spec-make ?h l-host ?u l-user ?p l-port ?t tmpfile) command (concat ;; We do not want to see the trailing local prompt in @@ -7981,7 +8004,7 @@ (tramp-get-connection-process vec) vec) "remote-path" - (let* ((remote-path (tramp-compat-copy-tree tramp-remote-path)) + (let* ((remote-path (copy-tree tramp-remote-path)) (elt1 (memq 'tramp-default-remote-path remote-path)) (elt2 (memq 'tramp-own-remote-path remote-path)) (default-remote-path @@ -8280,7 +8303,7 @@ (defadvice make-auto-save-file-name (around tramp-advice-make-auto-save-file-name () activate) "Invoke `tramp-handle-make-auto-save-file-name' for Tramp files." - (if (and (buffer-file-name) (tramp-tramp-file-p (buffer-file-name))) + (if (tramp-tramp-file-p (buffer-file-name)) ;; We cannot call `tramp-handle-make-auto-save-file-name' ;; directly, because this would bypass the locking mechanism. (setq ad-return-value @@ -8294,14 +8317,13 @@ 'around 'tramp-advice-make-auto-save-file-name) (ad-activate 'make-auto-save-file-name)))) -;; In Emacs < 22 and XEmacs < 21.5 autosaved remote files have -;; permission 0666 minus umask. This is a security threat. +;; In XEmacs < 21.5, autosaved remote files have permission 0666 minus +;; umask. This is a security threat. (defun tramp-set-auto-save-file-modes () "Set permissions of autosaved remote files to the original permissions." (let ((bfn (buffer-file-name))) - (when (and (stringp bfn) - (tramp-tramp-file-p bfn) + (when (and (tramp-tramp-file-p bfn) (buffer-modified-p) (stringp buffer-auto-save-file-name) (not (equal bfn buffer-auto-save-file-name))) @@ -8313,10 +8335,9 @@ (set-file-modes buffer-auto-save-file-name (or (file-modes bfn) (tramp-octal-to-decimal "0600")))))) -(unless (or (> emacs-major-version 21) - (and (featurep 'xemacs) - (= emacs-major-version 21) - (> emacs-minor-version 4))) +(unless (and (featurep 'xemacs) + (= emacs-major-version 21) + (> emacs-minor-version 4)) (add-hook 'auto-save-hook 'tramp-set-auto-save-file-modes) (add-hook 'tramp-unload-hook (lambda () @@ -8560,7 +8581,6 @@ ;; * Remove unneeded parameters from methods. ;; * Make it work for different encodings, and for different file name ;; encodings, too. (Daniel Pittman) -;; * Progress reports while copying files. (Michael Kifer) ;; * Don't search for perl5 and perl. Instead, only search for perl and ;; then look if it's the right version (with `perl -v'). ;; * When editing a remote CVS controlled file as a different user, VC @@ -8625,7 +8645,7 @@ ;; expects only English messages? (Juri Linkov) ;; * Make shadowfile.el grok Tramp filenames. (Bug#4526, Bug#4846) ;; * Do not handle files with drive letter as remote. (Bug#5447) -;; * Load Tramp subpackages only when needed. (Bug#1529, Bug#5448) +;; * Load Tramp subpackages only when needed. (Bug#1529, Bug#5448, Bug#5705) ;; * Try telnet+curl as new method. It might be useful for busybox, ;; without built-in uuencode/uudecode. ;; * Let `shell-dynamic-complete-*' and `comint-dynamic-complete' work diff -r 0346e41d1e53 -r de8a1b891175 lisp/net/trampver.el --- a/lisp/net/trampver.el Fri Apr 09 12:36:12 2010 +0000 +++ b/lisp/net/trampver.el Sun Apr 11 10:53:01 2010 +0000 @@ -1,8 +1,8 @@ ;;; trampver.el --- Transparent Remote Access, Multiple Protocol ;;; lisp/trampver.el. Generated from trampver.el.in by configure. -;; Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, -;; 2009, 2010 Free Software Foundation, Inc. +;; Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, +;; 2010 Free Software Foundation, Inc. ;; Author: Kai Großjohann ;; Keywords: comm, processes @@ -24,19 +24,20 @@ ;;; Code: -;; In the Tramp CVS repository, the version numer and the bug report address -;; are auto-frobbed from configure.ac, so you should edit that file and run -;; "autoconf && ./configure" to change them. (X)Emacs version check is defined -;; in macro AC_EMACS_INFO of aclocal.m4; should be changed only there. +;; In the Tramp CVS repository, the version number and the bug report +;; address are auto-frobbed from configure.ac, so you should edit that +;; file and run "autoconf && ./configure" to change them. (X)Emacs +;; version check is defined in macro AC_EMACS_INFO of aclocal.m4; +;; should be changed only there. -(defconst tramp-version "2.1.18-23.2" +(defconst tramp-version "2.1.19-pre" "This version of Tramp.") (defconst tramp-bug-report-address "tramp-devel@gnu.org" "Email address to send bug reports to.") ;; Check for (X)Emacs version. -(let ((x (if (or (< emacs-major-version 21) (and (featurep 'xemacs) (= emacs-major-version 21) (< emacs-minor-version 4))) (format "Tramp 2.1.18-pre is not fit for %s" (when (string-match "^.*$" (emacs-version)) (match-string 0 (emacs-version)))) "ok"))) +(let ((x (if (or (>= emacs-major-version 22) (and (featurep 'xemacs) (= emacs-major-version 21) (>= emacs-minor-version 4))) "ok" (format "Tramp 2.1.19-pre is not fit for %s" (when (string-match "^.*$" (emacs-version)) (match-string 0 (emacs-version))))))) (unless (string-match "\\`ok\\'" x) (error "%s" x))) (provide 'trampver) diff -r 0346e41d1e53 -r de8a1b891175 lisp/progmodes/bug-reference.el --- a/lisp/progmodes/bug-reference.el Fri Apr 09 12:36:12 2010 +0000 +++ b/lisp/progmodes/bug-reference.el Sun Apr 11 10:53:01 2010 +0000 @@ -131,12 +131,6 @@ (bug-reference-unfontify (point-min) (point-max))))) ;;;###autoload -(defun turn-on-bug-reference-mode () - "Unconditionally turn bug reference mode on." - (unless bug-reference-mode - (bug-reference-mode))) - -;;;###autoload (define-minor-mode bug-reference-prog-mode "Like `bug-reference-mode', but only buttonize in comments and strings." nil @@ -149,11 +143,5 @@ (widen) (bug-reference-unfontify (point-min) (point-max))))) -;;;###autoload -(defun turn-on-bug-reference-prog-mode () - "Unconditionally turn bug reference prog mode on." - (unless bug-reference-prog-mode - (bug-reference-prog-mode))) - ;; arch-tag: b138abce-e5c3-475e-bd58-7afba40387ea ;;; bug-reference.el ends here diff -r 0346e41d1e53 -r de8a1b891175 lisp/progmodes/compile.el --- a/lisp/progmodes/compile.el Fri Apr 09 12:36:12 2010 +0000 +++ b/lisp/progmodes/compile.el Sun Apr 11 10:53:01 2010 +0000 @@ -583,7 +583,6 @@ :type 'boolean :group 'compilation) -;;;###autoload (defcustom compilation-save-buffers-predicate nil "The second argument (PRED) passed to `save-some-buffers' before compiling. E.g., one can set this to @@ -596,7 +595,8 @@ (const :tag "Default (save all file-visiting buffers)" nil) (const :tag "Save all buffers" t) function) - :group 'compilation) + :group 'compilation + :version "24.1") ;;;###autoload (defcustom compilation-search-path '(nil) diff -r 0346e41d1e53 -r de8a1b891175 lisp/vc-arch.el --- a/lisp/vc-arch.el Fri Apr 09 12:36:12 2010 +0000 +++ b/lisp/vc-arch.el Sun Apr 11 10:53:01 2010 +0000 @@ -254,8 +254,7 @@ (buffer-substring (point-min) (1- (point-max))))))))) (defun vc-arch-workfile-unchanged-p (file) - "Check if FILE is unchanged by diffing against the master version. -Return non-nil if FILE is unchanged." + "Stub: arch workfiles are always considered to be in a changed state," nil) (defun vc-arch-state (file) diff -r 0346e41d1e53 -r de8a1b891175 lisp/vc-git.el --- a/lisp/vc-git.el Fri Apr 09 12:36:12 2010 +0000 +++ b/lisp/vc-git.el Sun Apr 11 10:53:01 2010 +0000 @@ -171,7 +171,14 @@ (defun vc-git-state (file) "Git-specific version of `vc-state'." - ;; FIXME: This can't set 'ignored yet + ;; FIXME: This can't set 'ignored or 'conflict yet + ;; The 'ignored state could be detected with `git ls-files -i -o + ;; --exclude-standard` It also can't set 'needs-update or + ;; 'needs-merge. The rough equivalent would be that upstream branch + ;; for current branch is in fast-forward state i.e. current branch + ;; is direct ancestor of corresponding upstream branch, and the file + ;; was modified upstream. But we can't check that without a network + ;; operation. (if (not (vc-git-registered file)) 'unregistered (vc-git--call nil "add" "--refresh" "--" (file-relative-name file)) @@ -541,10 +548,10 @@ (vc-git-command nil 0 file "rm" "-f" "--cached" "--")) -(defun vc-git-checkin (files rev comment &optional extra-args-ignored) +(defun vc-git-checkin (files rev comment &optional extra-args) (let ((coding-system-for-write git-commits-coding-system)) - (vc-git-command nil 0 files "commit" - "-m" comment "--only" "--"))) + (apply 'vc-git-command nil 0 files + (nconc (list "commit" "-m" comment) extra-args (list "--only" "--"))))) (defun vc-git-find-revision (file rev buffer) (let* (process-file-side-effects @@ -783,6 +790,21 @@ (progn (forward-line 1) (1- (point))))))))) (or (vc-git-symbolic-commit next-rev) next-rev))) +(declare-function log-edit-mode "log-edit" ()) +(defvar log-edit-extra-flags) +(defvar log-edit-before-checkin-process) + +(define-derived-mode vc-git-log-edit-mode log-edit-mode "Git-log-edit" + "Mode for editing Git commit logs. +If a line like: +Author: NAME +is present in the log, it is removed, and +--author=NAME +is passed to the git commit command." + (set (make-local-variable 'log-edit-extra-flags) nil) + (set (make-local-variable 'log-edit-before-checkin-process) + '(("^Author:[ \t]+\\(.*\\)[ \t]*$" . (list "--author" (match-string 1)))))) + (defun vc-git-delete-file (file) (vc-git-command nil 0 file "rm" "-f" "--")) diff -r 0346e41d1e53 -r de8a1b891175 lisp/vc-hooks.el --- a/lisp/vc-hooks.el Fri Apr 09 12:36:12 2010 +0000 +++ b/lisp/vc-hooks.el Sun Apr 11 10:53:01 2010 +0000 @@ -396,7 +396,7 @@ (defun vc-backend-subdirectory-name (file) - "Return where the master and lock FILEs for the current directory are kept." + "Return where the repository for the current directory is kept." (symbol-name (vc-backend file))) (defun vc-name (file) @@ -460,17 +460,20 @@ 'edited The working file has been edited by the user. If locking is used for the file, this state means that the current version is locked by the calling user. + This status should *not* be reported for files + which have a changed mtime but the same content + as the repo copy. USER The current version of the working file is locked by some other USER (a string). - 'needs-update The file has not been edited by the user, but there is + 'needs-update The file has not been edited by the user, but there is a more recent version on the current branch stored - in the master file. + in the repository. 'needs-merge The file has been edited by the user, and there is also a more recent version on the current branch stored in - the master file. This state can only occur if locking + the repository. This state can only occur if locking is not used for the file. 'unlocked-changes The working version of the file is not locked, @@ -549,7 +552,7 @@ unchanged)))) (defun vc-default-workfile-unchanged-p (backend file) - "Check if FILE is unchanged by diffing against the master version. + "Check if FILE is unchanged by diffing against the repository version. Return non-nil if FILE is unchanged." (zerop (condition-case err ;; If the implementation supports it, let the output diff -r 0346e41d1e53 -r de8a1b891175 lisp/vc.el --- a/lisp/vc.el Fri Apr 09 12:36:12 2010 +0000 +++ b/lisp/vc.el Sun Apr 11 10:53:01 2010 +0000 @@ -63,11 +63,18 @@ ;; although you might prefer to use C-c C-a (i.e. `log-edit-insert-changelog') ;; from the commit buffer instead or to set `log-edit-setup-invert'. ;; -;; The vc code maintains some internal state in order to reduce expensive -;; version-control operations to a minimum. Some names are only computed -;; once. If you perform version control operations with the backend while -;; vc's back is turned, or move/rename master files while vc is running, -;; vc may get seriously confused. Don't do these things! +;; When using SCCS, RCS, CVS: be careful not to do repo surgery, or +;; operations like registrations and deletions and renames, outside VC +;; while VC is running. The support for these systems was designed +;; when disks were much slower, and the code maintains a lot of +;; internal state in order to reduce expensive operations to a +;; minimum. Thus, if you mess with the repo while VC's back is turned, +;; VC may get seriously confused. +;; +;; When using Subversion or a later system, anything you do outside VC +;; *through the VCS tools* should safely interlock with VC +;; operations. Under these VC does little state caching, because local +;; operations are assumed to be fast. The dividing line is ;; ;; ADDING SUPPORT FOR OTHER BACKENDS ;; @@ -196,7 +203,7 @@ ;; ;; Return non-nil if FILE is unchanged from the working revision. ;; This function should do a brief comparison of FILE's contents -;; with those of the repository master of the working revision. If +;; with those of the repository copy of the working revision. If ;; the backend does not have such a brief-comparison feature, the ;; default implementation of this function can be used, which ;; delegates to a full vc-BACKEND-diff. (Note that vc-BACKEND-diff @@ -784,7 +791,7 @@ (defcustom vc-checkout-carefully (= (user-uid) 0) "Non-nil means be extra-careful in checkout. Verify that the file really is not locked -and that its contents match what the master file says." +and that its contents match what the repository version says." :type 'boolean :group 'vc) (make-obsolete-variable 'vc-checkout-carefully @@ -1518,7 +1525,7 @@ (not (string= (vc-working-revision file) "0"))) (push file filtered) ;; This file is added but not yet committed; - ;; there is no master file to diff against. + ;; there is no repository version to diff against. (if (or rev1 rev2) (error "No revisions of %s exist" file) ;; We regard this as "changed". @@ -2318,7 +2325,7 @@ (if unmodified-file (copy-file unmodified-file file 'ok-if-already-exists 'keep-date) - (when (y-or-n-p "Get base revision from master? ") + (when (y-or-n-p "Get base revision from repository? ") (vc-revert-file file)))) (vc-call-backend new-backend 'receive-file file rev)) (when modified-file @@ -2405,7 +2412,7 @@ ;;;###autoload (defun vc-rename-file (old new) - "Rename file OLD to NEW, and rename its master file likewise." + "Rename file OLD to NEW in both work area and repository." (interactive "fVC rename file: \nFRename to: ") ;; in CL I would have said (setq new (merge-pathnames new old)) (let ((old-base (file-name-nondirectory old))) diff -r 0346e41d1e53 -r de8a1b891175 src/ChangeLog --- a/src/ChangeLog Fri Apr 09 12:36:12 2010 +0000 +++ b/src/ChangeLog Sun Apr 11 10:53:01 2010 +0000 @@ -1,3 +1,26 @@ +2010-04-10 Dan Nicolaescu + + * s/msdos.h (UNEXEC): New definition. + +2010-04-10 YAMAMOTO Mitsuharu + + * dispextern.h (TRY_WINDOW_CHECK_MARGINS) + (TRY_WINDOW_IGNORE_FONTS_CHANGE): New defines. + + * xdisp.c (try_window): Change arg from CHECK_MARGINS to FLAGS. + Don't abort with fonts change if TRY_WINDOW_IGNORE_FONTS_CHANGE is + set in FLAGS. Callers with non-zero CHECK_MARGINS changed to use + TRY_WINDOW_CHECK_MARGINS. + + * xfns.c (Fx_show_tip): Undo last change. Call try_window with + TRY_WINDOW_IGNORE_FONTS_CHANGE (Bug#2423). Subtract last glyph's + width only when it is for padding. + +2010-04-09 Jan Djärv + + * xfns.c (Fx_show_tip): Call try_window in a loop until + fonts_changed_p is zero (Bug#2423). + 2010-04-08 Eli Zaretskii * xdisp.c (set_cursor_from_row): Don't dereference glyphs beyond diff -r 0346e41d1e53 -r de8a1b891175 src/dispextern.h --- a/src/dispextern.h Fri Apr 09 12:36:12 2010 +0000 +++ b/src/dispextern.h Sun Apr 11 10:53:01 2010 +0000 @@ -2974,6 +2974,10 @@ XRectangle *)); #endif +/* Flags passed to try_window. */ +#define TRY_WINDOW_CHECK_MARGINS (1 << 0) +#define TRY_WINDOW_IGNORE_FONTS_CHANGE (1 << 1) + /* Defined in fringe.c */ int lookup_fringe_bitmap (Lisp_Object); diff -r 0346e41d1e53 -r de8a1b891175 src/s/msdos.h --- a/src/s/msdos.h Fri Apr 09 12:36:12 2010 +0000 +++ b/src/s/msdos.h Sun Apr 11 10:53:01 2010 +0000 @@ -172,5 +172,7 @@ #define NO_REMAP +#define UNEXEC unexec.o + /* arch-tag: d184f860-815d-4ff4-8187-d05c0f3c37d0 (do not change this comment) */ diff -r 0346e41d1e53 -r de8a1b891175 src/xdisp.c --- a/src/xdisp.c Fri Apr 09 12:36:12 2010 +0000 +++ b/src/xdisp.c Sun Apr 11 10:53:01 2010 +0000 @@ -14203,7 +14203,7 @@ = try_window_reusing_current_matrix (w))) { IF_DEBUG (debug_method_add (w, "1")); - if (try_window (window, startp, 1) < 0) + if (try_window (window, startp, TRY_WINDOW_CHECK_MARGINS) < 0) /* -1 means we need to scroll. 0 means we need new matrices, but fonts_changed_p is set in that case, so we will detect it below. */ @@ -14554,13 +14554,15 @@ Value is 1 if successful. It is zero if fonts were loaded during redisplay which makes re-adjusting glyph matrices necessary, and -1 if point would appear in the scroll margins. - (We check that only if CHECK_MARGINS is nonzero. */ + (We check the former only if TRY_WINDOW_IGNORE_FONTS_CHANGE is + unset in FLAGS, and the latter only if TRY_WINDOW_CHECK_MARGINS is + set in FLAGS.) */ int -try_window (window, pos, check_margins) +try_window (window, pos, flags) Lisp_Object window; struct text_pos pos; - int check_margins; + int flags; { struct window *w = XWINDOW (window); struct it it; @@ -14582,12 +14584,12 @@ { if (display_line (&it)) last_text_row = it.glyph_row - 1; - if (fonts_changed_p) + if (fonts_changed_p && !(flags & TRY_WINDOW_IGNORE_FONTS_CHANGE)) return 0; } /* Don't let the cursor end in the scroll margins. */ - if (check_margins + if ((flags & TRY_WINDOW_CHECK_MARGINS) && !MINI_WINDOW_P (w)) { int this_scroll_margin; diff -r 0346e41d1e53 -r de8a1b891175 src/xfns.c --- a/src/xfns.c Fri Apr 09 12:36:12 2010 +0000 +++ b/src/xfns.c Sun Apr 11 10:53:01 2010 +0000 @@ -5228,7 +5228,7 @@ clear_glyph_matrix (w->desired_matrix); clear_glyph_matrix (w->current_matrix); SET_TEXT_POS (pos, BEGV, BEGV_BYTE); - try_window (FRAME_ROOT_WINDOW (f), pos, 0); + try_window (FRAME_ROOT_WINDOW (f), pos, TRY_WINDOW_IGNORE_FONTS_CHANGE); /* Compute width and height of the tooltip. */ width = height = 0; @@ -5245,15 +5245,15 @@ /* Let the row go over the full width of the frame. */ row->full_width_p = 1; + row_width = row->pixel_width; /* There's a glyph at the end of rows that is used to place the cursor there. Don't include the width of this glyph. */ if (row->used[TEXT_AREA]) { last = &row->glyphs[TEXT_AREA][row->used[TEXT_AREA] - 1]; - row_width = row->pixel_width - last->pixel_width; + if (INTEGERP (last->object)) + row_width -= last->pixel_width; } - else - row_width = row->pixel_width; height += row->height; width = max (width, row_width);