aboutsummaryrefslogtreecommitdiffstats
path: root/lisp
diff options
context:
space:
mode:
authorKenichi Handa2010-05-25 09:35:50 +0900
committerKenichi Handa2010-05-25 09:35:50 +0900
commit8a2b8c4f7c2a18254fc0b34f236d7487fc7917d4 (patch)
tree48e379874bd0bf796a12a5f43b369e0d6691a125 /lisp
parent10f72a3793087770f131a0dc729f29ff50f08ad9 (diff)
parent7eca871a82d582b986c638343f74d16b819a0f14 (diff)
downloademacs-8a2b8c4f7c2a18254fc0b34f236d7487fc7917d4.tar.gz
emacs-8a2b8c4f7c2a18254fc0b34f236d7487fc7917d4.zip
merge trunk
Diffstat (limited to 'lisp')
-rw-r--r--lisp/ChangeLog155
-rw-r--r--lisp/add-log.el2
-rw-r--r--lisp/comint.el1
-rw-r--r--lisp/composite.el8
-rw-r--r--lisp/dired-x.el23
-rw-r--r--lisp/dired.el7
-rw-r--r--lisp/emacs-lisp/cl-loaddefs.el2
-rw-r--r--lisp/emacs-lisp/cl-macs.el1
-rw-r--r--lisp/gnus/ChangeLog4
-rw-r--r--lisp/gnus/gnus-start.el2
-rw-r--r--lisp/help-mode.el4
-rw-r--r--lisp/image-mode.el4
-rw-r--r--lisp/image.el1
-rw-r--r--lisp/indent.el6
-rw-r--r--lisp/isearch.el30
-rw-r--r--lisp/loadup.el2
-rw-r--r--lisp/locate.el2
-rw-r--r--lisp/mh-e/ChangeLog7
-rw-r--r--lisp/mh-e/mh-comp.el3
-rw-r--r--lisp/mh-e/mh-mime.el9
-rw-r--r--lisp/net/secrets.el64
-rw-r--r--lisp/net/tramp-fish.el98
-rw-r--r--lisp/net/tramp-gvfs.el107
-rw-r--r--lisp/net/tramp-imap.el72
-rw-r--r--lisp/net/tramp.el493
-rw-r--r--lisp/nxml/nxml-mode.el1
-rw-r--r--lisp/password-cache.el2
-rw-r--r--lisp/progmodes/cc-engine.el169
-rw-r--r--lisp/progmodes/f90.el15
-rw-r--r--lisp/progmodes/fortran.el15
-rw-r--r--lisp/progmodes/grep.el9
-rw-r--r--lisp/progmodes/octave-mod.el1
-rw-r--r--lisp/progmodes/subword.el2
-rw-r--r--lisp/replace.el3
-rw-r--r--lisp/simple.el3
-rw-r--r--lisp/smerge-mode.el22
-rw-r--r--lisp/vc-dir.el3
37 files changed, 803 insertions, 549 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 545311d6530..72f00e60edf 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,8 +1,159 @@
12010-05-22 Chong Yidong <cyd@stupidchicken.com>
2
3 * image.el (image-refresh): Define as an alias for image-flush.
4
5 * image-mode.el (image-toggle-display-image): Caller changed.
6
72010-05-21 Juri Linkov <juri@jurta.org>
8
9 * progmodes/grep.el (grep-read-files): Fix multi-pattern aliases.
10 Remove "all" from grep-files-aliases. Split grep-files-aliases by
11 whitespace, call wildcard-to-regexp on substrings and concat them
12 with "\\|". (Bug#6114)
13
142010-05-21 Alan Mackenzie <acm@muc.de>
15
16 * progmodes/cc-engine.el (c-parse-state-get-strategy): Replace
17 parameter `here' with `here-' and `here-plus', which sandwich any
18 pertinent CPP construct.
19 (c-remove-stale-state-cache-backwards): Fix a bug which happens
20 when doing (c-parse-state) in a CPP construct: Exclude any "new"
21 CPP construct from taking part in the scanning.
22
232010-05-21 Michael Albinus <michael.albinus@gmx.de>
24
25 * net/tramp.el (tramp-do-copy-or-rename-file)
26 (tramp-handle-file-local-copy, tramp-maybe-open-connection): Tune
27 `with-progress-reporter' messages.
28 (tramp-handle-vc-registered):
29 * net/tramp-fish.el (tramp-fish-handle-file-local-copy)
30 (tramp-fish-handle-insert-file-contents)
31 (tramp-fish-maybe-open-connection):
32 * net/tramp-gvfs.el (tramp-gvfs-maybe-open-connection):
33 * net/tramp-imap.el (tramp-imap-do-copy-or-rename-file)
34 (tramp-imap-handle-insert-file-contents)
35 (tramp-imap-handle-file-local-copy): Use `with-progress-reporter'.
36
372010-05-21 Juanma Barranquero <lekktu@gmail.com>
38
39 * add-log.el (change-log-font-lock-keywords):
40 Highlight all authors in multi-author entries.
41
42 * smerge-mode.el (smerge-refine-ignore-whitespace)
43 (smerge-refine-weight-hack, smerge-refine, smerge-makeup-conflict):
44 Fix typos in docstrings.
45 (smerge-resolve, smerge-refine-subst): Reflow docstrings.
46
472010-05-21 Glenn Morris <rgm@gnu.org>
48
49 * progmodes/fortran.el (fortran-mode):
50 * progmodes/f90.el (f90-mode): Derive from prog-mode.
51
52 * loadup.el [CANNOT_DUMP]: Update for bootstrap-emacs no longer
53 having a relative path in src/Makefile.in.
54
552010-05-20 Kevin Ryde <user42@zip.com.au>
56
57 * help-mode.el (help-make-xrefs): For Info node links turn
58 newlines into spaces. Link node names with newlines are matched
59 by help-xref-info-regexp and buttonized, this change ensures they
60 can be followed successfully with RET. (Bug#6206)
61
622010-05-20 Juri Linkov <juri@jurta.org>
63
64 * locate.el (locate): Use pop-to-buffer instead of
65 switch-to-buffer-other-window. (Bug#6204)
66
672010-05-20 Juri Linkov <juri@jurta.org>
68
69 * replace.el (replace-highlight): Fix lazy-highlighting
70 for `M-s w str M-% str RET'.
71
722009-12-15 Masatake YAMATO <yamato@redhat.com>
73
74 * isearch.el (isearch-yank-word-or-char): Pull next subword
75 when `subword-mode' is activated. (Bug#6220)
76
772010-05-20 Mark A. Hershberger <mah@everybody.org>
78
79 * isearch.el (isearch-update-post-hook): New hook.
80 (isearch-update): Use the new hook. (Bug#6225)
81
822010-05-20 Juri Linkov <juri@jurta.org>
83
84 * isearch.el (isearch-mode-map): Bind more keys to isearch-help-map:
85 [f1], [help], and (char-to-string help-char) instead of "\C-h".
86 (Bug#6222)
87
882010-05-20 Juri Linkov <juri@jurta.org>
89
90 * isearch.el (isearch-yank-string): Use isearch-process-search-string.
91 (Bug#6223)
92
932010-05-20 Juri Linkov <juri@jurta.org>
94
95 * dired-x.el (dired-jump, dired-jump-other-window): Add arg
96 FILE-NAME to read from the minibuffer when called interactively
97 with prefix argument instead of using buffer-file-name.
98 http://lists.gnu.org/archive/html/emacs-devel/2010-05/msg00534.html
99
100 * dired.el: Update autoloads.
101
1022010-05-20 Chong Yidong <cyd@stupidchicken.com>
103
104 * nxml/nxml-mode.el (nxml-mode-map): Bind C-c / to
105 nxml-finish-element, for consistency with SGML mode.
106
107 * progmodes/octave-mod.el (octave-mode-map): Bind C-c / to
108 octave-close-block.
109
1102010-05-20 Juanma Barranquero <lekktu@gmail.com>
111
112 * composite.el: Require cl when compiling.
113 (reference-point-alist, compose-gstring-for-graphic)
114 (compose-gstring-for-terminal): Fix typos in docstrings.
115
1162010-05-19 Juri Linkov <juri@jurta.org>
117
118 * emacs-lisp/cl-macs.el (window-parameter): Add defsetf with
119 set-window-parameter.
120
1212010-05-19 Michael Albinus <michael.albinus@gmx.de>
122
123 * net/tramp.el (tramp-methods): Add `tramp-async-args' attribute
124 where appropriate.
125 (tramp-maybe-open-connection): Use it.
126
1272010-05-19 Eli Zaretskii <eliz@gnu.org>
128
129 * simple.el (move-end-of-line): Make sure we are at line beginning
130 before backing up to end of previous line.
131
1322010-05-19 Michael Albinus <michael.albinus@gmx.de>
133
134 * password-cache.el (password-cache-remove): Fix docstring.
135
136 * net/secrets.el: Autoload the widget functions.
137 (secrets-search-items, secrets-create-item)
138 (secrets-get-attributes, secrets-expand-item): Attributes will be
139 stored on the password database without leading ":", as all other
140 clients do as well.
141 (secrets-mode): Fix docstring.
142 (secrets-show-secrets): Provide it as autoloaded command only when
143 D-Bus support is available. Check existence of Secret Service API.
144
1452010-05-19 Stefan Monnier <monnier@iro.umontreal.ca>
146
147 * indent.el (indent-region): Deactivate region (bug#6200).
148
1492010-05-19 Glenn Morris <rgm@gnu.org>
150
151 * vc-dir.el (vc-dir): Don't pop-up-windows. (Bug#6204)
152
12010-05-19 Kenichi Handa <handa@m17n.org> 1532010-05-19 Kenichi Handa <handa@m17n.org>
2 154
3 * composite.el: Register compose-gstring-for-graphic in 155 * composite.el: Register compose-gstring-for-graphic in
4 composition-function-table only for combining characters (Mn, Mc, 156 composition-function-table only for combining characters (Mn, Mc, Me).
5 Me).
6 157
72010-05-18 Jay Belanger <jay.p.belanger@gmail.com> 1582010-05-18 Jay Belanger <jay.p.belanger@gmail.com>
8 159
diff --git a/lisp/add-log.el b/lisp/add-log.el
index ab99f6787c8..88277e66640 100644
--- a/lisp/add-log.el
+++ b/lisp/add-log.el
@@ -245,7 +245,7 @@ Note: The search is conducted only within 10%, at the beginning of the file."
245 ;; wrongly with a non-date line existing as a random note. In 245 ;; wrongly with a non-date line existing as a random note. In
246 ;; addition, using any kind of fixed setting like this doesn't 246 ;; addition, using any kind of fixed setting like this doesn't
247 ;; work if a user customizes add-log-time-format. 247 ;; work if a user customizes add-log-time-format.
248 ("^[0-9-]+ +\\|^\\(Sun\\|Mon\\|Tue\\|Wed\\|Thu\\|Fri\\|Sat\\) [A-z][a-z][a-z] [0-9:+ ]+" 248 ("^[0-9-]+ +\\|^ \\{11,\\}\\|^\\(Sun\\|Mon\\|Tue\\|Wed\\|Thu\\|Fri\\|Sat\\) [A-z][a-z][a-z] [0-9:+ ]+"
249 (0 'change-log-date-face) 249 (0 'change-log-date-face)
250 ;; Name and e-mail; some people put e-mail in parens, not angles. 250 ;; Name and e-mail; some people put e-mail in parens, not angles.
251 ("\\([^<(]+?\\)[ \t]*[(<]\\([A-Za-z0-9_.+-]+@[A-Za-z0-9_.-]+\\)[>)]" nil nil 251 ("\\([^<(]+?\\)[ \t]*[(<]\\([A-Za-z0-9_.+-]+@[A-Za-z0-9_.-]+\\)[>)]" nil nil
diff --git a/lisp/comint.el b/lisp/comint.el
index 8defc3c7800..fd3cff3b5f9 100644
--- a/lisp/comint.el
+++ b/lisp/comint.el
@@ -309,7 +309,6 @@ the function `comint-truncate-buffer' is on `comint-output-filter-functions'."
309 :type 'integer 309 :type 'integer
310 :group 'comint) 310 :group 'comint)
311 311
312;; FIXME: this should be defcustom
313(defcustom comint-input-ring-size 500 312(defcustom comint-input-ring-size 500
314 "Size of the input history ring in `comint-mode'." 313 "Size of the input history ring in `comint-mode'."
315 :type 'integer 314 :type 'integer
diff --git a/lisp/composite.el b/lisp/composite.el
index 0afb2864879..d886be5a463 100644
--- a/lisp/composite.el
+++ b/lisp/composite.el
@@ -28,6 +28,8 @@
28 28
29;;; Code: 29;;; Code:
30 30
31(eval-when-compile (require 'cl))
32
31(defconst reference-point-alist 33(defconst reference-point-alist
32 '((tl . 0) (tc . 1) (tr . 2) 34 '((tl . 0) (tc . 1) (tr . 2)
33 (Bl . 3) (Bc . 4) (Br . 5) 35 (Bl . 3) (Bc . 4) (Br . 5)
@@ -77,7 +79,7 @@ follows (the point `*' corresponds to both reference points):
77 +----+-----+ <--- new descent 79 +----+-----+ <--- new descent
78 80
79A composition rule may have the form \(GLOBAL-REF-POINT 81A composition rule may have the form \(GLOBAL-REF-POINT
80NEW-REF-POINT XOFF YOFF), where XOFF and YOFF specifies how much 82NEW-REF-POINT XOFF YOFF), where XOFF and YOFF specify how much
81to shift NEW-REF-POINT from GLOBAL-REF-POINT. In this case, XOFF 83to shift NEW-REF-POINT from GLOBAL-REF-POINT. In this case, XOFF
82and YOFF are integers in the range -100..100 representing the 84and YOFF are integers in the range -100..100 representing the
83shifting percentage against the font size.") 85shifting percentage against the font size.")
@@ -537,7 +539,7 @@ character. If the preceding character is not a base character,
537each combining character is composed as a spacing character by 539each combining character is composed as a spacing character by
538a padding space before and/or after the character. 540a padding space before and/or after the character.
539 541
540All non-spacing characters has this function in 542All non-spacing characters have this function in
541`composition-function-table' unless overwritten." 543`composition-function-table' unless overwritten."
542 (let* ((header (lgstring-header gstring)) 544 (let* ((header (lgstring-header gstring))
543 (nchars (lgstring-char-len gstring)) 545 (nchars (lgstring-char-len gstring))
@@ -669,7 +671,7 @@ All non-spacing characters has this function in
669Non-spacing characters are composed with the preceding base 671Non-spacing characters are composed with the preceding base
670character. If the preceding character is not a base character, 672character. If the preceding character is not a base character,
671each non-spacing character is composed as a spacing character by 673each non-spacing character is composed as a spacing character by
672a prepending a space before it." 674prepending a space before it."
673 (let* ((header (lgstring-header gstring)) 675 (let* ((header (lgstring-header gstring))
674 (nchars (lgstring-char-len gstring)) 676 (nchars (lgstring-char-len gstring))
675 (nglyphs (lgstring-glyph-len gstring)) 677 (nglyphs (lgstring-glyph-len gstring))
diff --git a/lisp/dired-x.el b/lisp/dired-x.el
index aba4b7a7a9d..2dc7475e9e3 100644
--- a/lisp/dired-x.el
+++ b/lisp/dired-x.el
@@ -506,16 +506,21 @@ See variables `dired-texinfo-unclean-extensions',
506;;; JUMP. 506;;; JUMP.
507 507
508;;;###autoload 508;;;###autoload
509(defun dired-jump (&optional other-window) 509(defun dired-jump (&optional other-window file-name)
510 "Jump to dired buffer corresponding to current buffer. 510 "Jump to dired buffer corresponding to current buffer.
511If in a file, dired the current directory and move to file's line. 511If in a file, dired the current directory and move to file's line.
512If in Dired already, pop up a level and goto old directory's line. 512If in Dired already, pop up a level and goto old directory's line.
513In case the proper dired file line cannot be found, refresh the dired 513In case the proper dired file line cannot be found, refresh the dired
514buffer and try again." 514buffer and try again.
515 (interactive "P") 515When OTHER-WINDOW is non-nil, jump to dired buffer in other window.
516 (let* ((file buffer-file-name) 516Interactively with prefix argument, read FILE-NAME and
517move to its line in dired."
518 (interactive
519 (list nil (and current-prefix-arg
520 (read-file-name "Jump to dired file: "))))
521 (let* ((file (or file-name buffer-file-name))
517 (dir (if file (file-name-directory file) default-directory))) 522 (dir (if file (file-name-directory file) default-directory)))
518 (if (eq major-mode 'dired-mode) 523 (if (and (eq major-mode 'dired-mode) (null file-name))
519 (progn 524 (progn
520 (setq dir (dired-current-directory)) 525 (setq dir (dired-current-directory))
521 (dired-up-directory other-window) 526 (dired-up-directory other-window)
@@ -539,10 +544,12 @@ buffer and try again."
539 (dired-omit-mode) 544 (dired-omit-mode)
540 (dired-goto-file file)))))))) 545 (dired-goto-file file))))))))
541 546
542(defun dired-jump-other-window () 547(defun dired-jump-other-window (&optional file-name)
543 "Like \\[dired-jump] (`dired-jump') but in other window." 548 "Like \\[dired-jump] (`dired-jump') but in other window."
544 (interactive) 549 (interactive
545 (dired-jump t)) 550 (list (and current-prefix-arg
551 (read-file-name "Jump to dired file: "))))
552 (dired-jump t file-name))
546 553
547;;; OMITTING. 554;;; OMITTING.
548 555
diff --git a/lisp/dired.el b/lisp/dired.el
index 0dc53bf32c4..ae9915698de 100644
--- a/lisp/dired.el
+++ b/lisp/dired.el
@@ -3974,7 +3974,7 @@ true then the type of the file linked to by FILE is printed instead.
3974;;;*** 3974;;;***
3975 3975
3976;;;### (autoloads (dired-do-relsymlink dired-jump) "dired-x" "dired-x.el" 3976;;;### (autoloads (dired-do-relsymlink dired-jump) "dired-x" "dired-x.el"
3977;;;;;; "2f8d3d5a31b969b181e23c40d6bb16a0") 3977;;;;;; "6c492aba3ca0d36a4cd7b02fb9c1cc10")
3978;;; Generated autoloads from dired-x.el 3978;;; Generated autoloads from dired-x.el
3979 3979
3980(autoload 'dired-jump "dired-x" "\ 3980(autoload 'dired-jump "dired-x" "\
@@ -3983,8 +3983,11 @@ If in a file, dired the current directory and move to file's line.
3983If in Dired already, pop up a level and goto old directory's line. 3983If in Dired already, pop up a level and goto old directory's line.
3984In case the proper dired file line cannot be found, refresh the dired 3984In case the proper dired file line cannot be found, refresh the dired
3985buffer and try again. 3985buffer and try again.
3986When OTHER-WINDOW is non-nil, jump to dired buffer in other window.
3987Interactively with prefix argument, read FILE-NAME and
3988move to its line in dired.
3986 3989
3987\(fn &optional OTHER-WINDOW)" t nil) 3990\(fn &optional OTHER-WINDOW FILE-NAME)" t nil)
3988 3991
3989(autoload 'dired-do-relsymlink "dired-x" "\ 3992(autoload 'dired-do-relsymlink "dired-x" "\
3990Relative symlink all marked (or next ARG) files into a directory. 3993Relative symlink all marked (or next ARG) files into a directory.
diff --git a/lisp/emacs-lisp/cl-loaddefs.el b/lisp/emacs-lisp/cl-loaddefs.el
index e828325bd0e..1bffcde03d2 100644
--- a/lisp/emacs-lisp/cl-loaddefs.el
+++ b/lisp/emacs-lisp/cl-loaddefs.el
@@ -282,7 +282,7 @@ Not documented
282;;;;;; flet progv psetq do-all-symbols do-symbols dotimes dolist 282;;;;;; flet progv psetq do-all-symbols do-symbols dotimes dolist
283;;;;;; do* do loop return-from return block etypecase typecase ecase 283;;;;;; do* do loop return-from return block etypecase typecase ecase
284;;;;;; case load-time-value eval-when destructuring-bind function* 284;;;;;; case load-time-value eval-when destructuring-bind function*
285;;;;;; defmacro* defun* gentemp gensym) "cl-macs" "cl-macs.el" "0faa39d8f21ae59f2cc1baa835e28a5f") 285;;;;;; defmacro* defun* gentemp gensym) "cl-macs" "cl-macs.el" "fbeedbf769c72fee9b4e0671957c1077")
286;;; Generated autoloads from cl-macs.el 286;;; Generated autoloads from cl-macs.el
287 287
288(autoload 'gensym "cl-macs" "\ 288(autoload 'gensym "cl-macs" "\
diff --git a/lisp/emacs-lisp/cl-macs.el b/lisp/emacs-lisp/cl-macs.el
index 57870b19066..444178edb0c 100644
--- a/lisp/emacs-lisp/cl-macs.el
+++ b/lisp/emacs-lisp/cl-macs.el
@@ -1813,6 +1813,7 @@ Example:
1813(defsetf window-height () (store) 1813(defsetf window-height () (store)
1814 (list 'progn (list 'enlarge-window (list '- store '(window-height))) store)) 1814 (list 'progn (list 'enlarge-window (list '- store '(window-height))) store))
1815(defsetf window-hscroll set-window-hscroll) 1815(defsetf window-hscroll set-window-hscroll)
1816(defsetf window-parameter set-window-parameter)
1816(defsetf window-point set-window-point) 1817(defsetf window-point set-window-point)
1817(defsetf window-start set-window-start) 1818(defsetf window-start set-window-start)
1818(defsetf window-width () (store) 1819(defsetf window-width () (store)
diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog
index 395cca72a93..26543c4048a 100644
--- a/lisp/gnus/ChangeLog
+++ b/lisp/gnus/ChangeLog
@@ -1,3 +1,7 @@
12010-05-20 Kevin Ryde <user42@zip.com.au>
2
3 * gnus-start.el (gnus-level-unsubscribed): Doc fix. (Bug#6206)
4
12010-05-14 Katsumi Yamaoka <yamaoka@jpl.org> 52010-05-14 Katsumi Yamaoka <yamaoka@jpl.org>
2 6
3 * gnus-sum.el (gnus-summary-save-article): Don't bother to re-fetch 7 * gnus-sum.el (gnus-summary-save-article): Don't bother to re-fetch
diff --git a/lisp/gnus/gnus-start.el b/lisp/gnus/gnus-start.el
index ff51530457f..9ef251f2147 100644
--- a/lisp/gnus/gnus-start.el
+++ b/lisp/gnus/gnus-start.el
@@ -181,7 +181,7 @@ Groups with levels less than `gnus-level-subscribed', which
181should be less than this variable, are subscribed. Groups with 181should be less than this variable, are subscribed. Groups with
182levels from `gnus-level-subscribed' (exclusive) upto this 182levels from `gnus-level-subscribed' (exclusive) upto this
183variable (inclusive) are unsubscribed. See also 183variable (inclusive) are unsubscribed. See also
184`gnus-level-zombie', `gnus-level-killed' and the Info node `Group 184`gnus-level-zombie', `gnus-level-killed' and the Info node `(gnus)Group
185Levels' for details.") 185Levels' for details.")
186 186
187(defconst gnus-level-zombie 8 187(defconst gnus-level-zombie 8
diff --git a/lisp/help-mode.el b/lisp/help-mode.el
index bad4ae94e2a..f115e425325 100644
--- a/lisp/help-mode.el
+++ b/lisp/help-mode.el
@@ -433,7 +433,9 @@ that."
433 (let ((data (match-string 2))) 433 (let ((data (match-string 2)))
434 (save-match-data 434 (save-match-data
435 (unless (string-match "^([^)]+)" data) 435 (unless (string-match "^([^)]+)" data)
436 (setq data (concat "(emacs)" data)))) 436 (setq data (concat "(emacs)" data)))
437 (setq data ;; possible newlines if para filled
438 (replace-regexp-in-string "[ \t\n]+" " " data t t)))
437 (help-xref-button 2 'help-info data)))) 439 (help-xref-button 2 'help-info data))))
438 ;; URLs 440 ;; URLs
439 (save-excursion 441 (save-excursion
diff --git a/lisp/image-mode.el b/lisp/image-mode.el
index dfc96bb4a16..f1323563d5d 100644
--- a/lisp/image-mode.el
+++ b/lisp/image-mode.el
@@ -448,7 +448,7 @@ Remove text properties that display the image."
448 448
449(defvar archive-superior-buffer) 449(defvar archive-superior-buffer)
450(defvar tar-superior-buffer) 450(defvar tar-superior-buffer)
451(declare-function image-refresh "image.c" (spec &optional frame)) 451(declare-function image-flush "image.c" (spec &optional frame))
452 452
453(defun image-toggle-display-image () 453(defun image-toggle-display-image ()
454 "Show the image of the image file. 454 "Show the image of the image file.
@@ -477,7 +477,7 @@ was inserted."
477 (inhibit-read-only t) 477 (inhibit-read-only t)
478 (buffer-undo-list t) 478 (buffer-undo-list t)
479 (modified (buffer-modified-p))) 479 (modified (buffer-modified-p)))
480 (image-refresh image) 480 (image-flush image)
481 (let ((buffer-file-truename nil)) ; avoid changing dir mtime by lock_file 481 (let ((buffer-file-truename nil)) ; avoid changing dir mtime by lock_file
482 (add-text-properties (point-min) (point-max) props) 482 (add-text-properties (point-min) (point-max) props)
483 (restore-buffer-modified-p modified)) 483 (restore-buffer-modified-p modified))
diff --git a/lisp/image.el b/lisp/image.el
index 67c1ad946b1..b3a0f1a8a7d 100644
--- a/lisp/image.el
+++ b/lisp/image.el
@@ -30,6 +30,7 @@
30 "Image support." 30 "Image support."
31 :group 'multimedia) 31 :group 'multimedia)
32 32
33(defalias 'image-refresh 'image-flush)
33 34
34(defconst image-type-header-regexps 35(defconst image-type-header-regexps
35 `(("\\`/[\t\n\r ]*\\*.*XPM.\\*/" . xpm) 36 `(("\\`/[\t\n\r ]*\\*.*XPM.\\*/" . xpm)
diff --git a/lisp/indent.el b/lisp/indent.el
index adecbfaeb12..c1da4a46b9c 100644
--- a/lisp/indent.el
+++ b/lisp/indent.el
@@ -431,7 +431,11 @@ column to indent to; if it is nil, use one of the three methods above."
431 (or (eolp) 431 (or (eolp)
432 (indent-to column 0)) 432 (indent-to column 0))
433 (forward-line 1)) 433 (forward-line 1))
434 (move-marker end nil)))) 434 (move-marker end nil)))
435 ;; In most cases, reindenting modifies the buffer, but it may also
436 ;; leave it unmodified, in which case we have to deactivate the mark
437 ;; by hand.
438 (deactivate-mark))
435 439
436(defun indent-relative-maybe () 440(defun indent-relative-maybe ()
437 "Indent a new line like previous nonblank line. 441 "Indent a new line like previous nonblank line.
diff --git a/lisp/isearch.el b/lisp/isearch.el
index 64cb66bdab5..ea5836edc4d 100644
--- a/lisp/isearch.el
+++ b/lisp/isearch.el
@@ -156,6 +156,9 @@ command history."
156(defvar isearch-mode-hook nil 156(defvar isearch-mode-hook nil
157 "Function(s) to call after starting up an incremental search.") 157 "Function(s) to call after starting up an incremental search.")
158 158
159(defvar isearch-update-post-hook nil
160 "Function(s) to call after isearch has found matches in the buffer.")
161
159(defvar isearch-mode-end-hook nil 162(defvar isearch-mode-end-hook nil
160 "Function(s) to call after terminating an incremental search. 163 "Function(s) to call after terminating an incremental search.
161When these functions are called, `isearch-mode-end-hook-quit' 164When these functions are called, `isearch-mode-end-hook-quit'
@@ -460,7 +463,9 @@ This is like `describe-bindings', but displays only Isearch keys."
460 (define-key map "\M-\C-y" 'isearch-yank-char) 463 (define-key map "\M-\C-y" 'isearch-yank-char)
461 (define-key map "\C-y" 'isearch-yank-line) 464 (define-key map "\C-y" 'isearch-yank-line)
462 465
463 (define-key map "\C-h" isearch-help-map) 466 (define-key map (char-to-string help-char) isearch-help-map)
467 (define-key map [help] isearch-help-map)
468 (define-key map [f1] isearch-help-map)
464 469
465 (define-key map "\M-n" 'isearch-ring-advance) 470 (define-key map "\M-n" 'isearch-ring-advance)
466 (define-key map "\M-p" 'isearch-ring-retreat) 471 (define-key map "\M-p" 'isearch-ring-retreat)
@@ -868,7 +873,8 @@ It is called by the function `isearch-forward' and other related functions."
868 (isearch-lazy-highlight-new-loop)) 873 (isearch-lazy-highlight-new-loop))
869 ;; We must prevent the point moving to the end of composition when a 874 ;; We must prevent the point moving to the end of composition when a
870 ;; part of the composition has just been searched. 875 ;; part of the composition has just been searched.
871 (setq disable-point-adjustment t)) 876 (setq disable-point-adjustment t)
877 (run-hooks 'isearch-update-post-hook))
872 878
873(defun isearch-done (&optional nopush edit) 879(defun isearch-done (&optional nopush edit)
874 "Exit Isearch mode. 880 "Exit Isearch mode.
@@ -1476,14 +1482,10 @@ If search string is empty, just beep."
1476 (eq 'not-yanks search-upper-case)) 1482 (eq 'not-yanks search-upper-case))
1477 (setq string (downcase string))) 1483 (setq string (downcase string)))
1478 (if isearch-regexp (setq string (regexp-quote string))) 1484 (if isearch-regexp (setq string (regexp-quote string)))
1479 (setq isearch-string (concat isearch-string string) 1485 ;; Don't move cursor in reverse search.
1480 isearch-message 1486 (setq isearch-yank-flag t)
1481 (concat isearch-message 1487 (isearch-process-search-string
1482 (mapconcat 'isearch-text-char-description 1488 string (mapconcat 'isearch-text-char-description string "")))
1483 string ""))
1484 ;; Don't move cursor in reverse search.
1485 isearch-yank-flag t)
1486 (isearch-search-and-update))
1487 1489
1488(defun isearch-yank-kill () 1490(defun isearch-yank-kill ()
1489 "Pull string from kill ring into search string." 1491 "Pull string from kill ring into search string."
@@ -1538,14 +1540,18 @@ or it might return the position of the end of the line."
1538 (interactive "p") 1540 (interactive "p")
1539 (isearch-yank-internal (lambda () (forward-char arg) (point)))) 1541 (isearch-yank-internal (lambda () (forward-char arg) (point))))
1540 1542
1543(declare-function subword-forward "subword" (&optional arg))
1541(defun isearch-yank-word-or-char () 1544(defun isearch-yank-word-or-char ()
1542 "Pull next character or word from buffer into search string." 1545 "Pull next character, subword or word from buffer into search string.
1546Subword is used when `subword-mode' is activated. "
1543 (interactive) 1547 (interactive)
1544 (isearch-yank-internal 1548 (isearch-yank-internal
1545 (lambda () 1549 (lambda ()
1546 (if (or (= (char-syntax (or (char-after) 0)) ?w) 1550 (if (or (= (char-syntax (or (char-after) 0)) ?w)
1547 (= (char-syntax (or (char-after (1+ (point))) 0)) ?w)) 1551 (= (char-syntax (or (char-after (1+ (point))) 0)) ?w))
1548 (forward-word 1) 1552 (if (and (boundp 'subword-mode) subword-mode)
1553 (subword-forward 1)
1554 (forward-word 1))
1549 (forward-char 1)) (point)))) 1555 (forward-char 1)) (point))))
1550 1556
1551(defun isearch-yank-word () 1557(defun isearch-yank-word ()
diff --git a/lisp/loadup.el b/lisp/loadup.el
index 36bf8dea082..b087aa79040 100644
--- a/lisp/loadup.el
+++ b/lisp/loadup.el
@@ -54,7 +54,7 @@
54 (equal (nth 3 command-line-args) "unidata-gen.el") 54 (equal (nth 3 command-line-args) "unidata-gen.el")
55 (equal (nth 4 command-line-args) "unidata-gen-files") 55 (equal (nth 4 command-line-args) "unidata-gen-files")
56 ;; In case CANNOT_DUMP. 56 ;; In case CANNOT_DUMP.
57 (equal (nth 0 command-line-args) "../src/bootstrap-emacs")) 57 (string-match "src/bootstrap-emacs" (nth 0 command-line-args)))
58 (let ((dir (car load-path))) 58 (let ((dir (car load-path)))
59 ;; We'll probably overflow the pure space. 59 ;; We'll probably overflow the pure space.
60 (setq purify-flag nil) 60 (setq purify-flag nil)
diff --git a/lisp/locate.el b/lisp/locate.el
index d0021dfed22..f1983a3e18a 100644
--- a/lisp/locate.el
+++ b/lisp/locate.el
@@ -326,7 +326,7 @@ ARG is the interactive prefix arg."
326 (locate-do-setup search-string) 326 (locate-do-setup search-string)
327 )) 327 ))
328 (and (not (string-equal (buffer-name) locate-buffer-name)) 328 (and (not (string-equal (buffer-name) locate-buffer-name))
329 (switch-to-buffer-other-window locate-buffer-name)) 329 (pop-to-buffer locate-buffer-name))
330 330
331 (run-hooks 'dired-mode-hook) 331 (run-hooks 'dired-mode-hook)
332 (dired-next-line 3) ;move to first matching file. 332 (dired-next-line 3) ;move to first matching file.
diff --git a/lisp/mh-e/ChangeLog b/lisp/mh-e/ChangeLog
index e3c9599b873..29a49c45a38 100644
--- a/lisp/mh-e/ChangeLog
+++ b/lisp/mh-e/ChangeLog
@@ -1,3 +1,10 @@
12010-05-14 Peter S Galbraith <psg@debian.org>
2
3 * mh-mime.el (mh-decode-message-subject): New function to decode
4 RFC2047 encoded Subject lines. Used for reply drafts.
5 * mh-comp.el (mh-compose-and-send-mail): Call
6 `mh-decode-message-subject' on (reply or forward) message drafts.
7
12010-05-07 Chong Yidong <cyd@stupidchicken.com> 82010-05-07 Chong Yidong <cyd@stupidchicken.com>
2 9
3 * Version 23.2 released. 10 * Version 23.2 released.
diff --git a/lisp/mh-e/mh-comp.el b/lisp/mh-e/mh-comp.el
index 3bb1e343253..762aad86080 100644
--- a/lisp/mh-e/mh-comp.el
+++ b/lisp/mh-e/mh-comp.el
@@ -905,6 +905,9 @@ letter."
905 (mh-identity-make-menu) 905 (mh-identity-make-menu)
906 (mh-identity-add-menu) 906 (mh-identity-add-menu)
907 907
908 ;; Cleanup possibly RFC2047 encoded subject header
909 (mh-decode-message-subject)
910
908 ;; Insert extra fields. 911 ;; Insert extra fields.
909 (mh-insert-x-mailer) 912 (mh-insert-x-mailer)
910 (mh-insert-x-face) 913 (mh-insert-x-face)
diff --git a/lisp/mh-e/mh-mime.el b/lisp/mh-e/mh-mime.el
index a60f31e3ac2..8d47af40ebd 100644
--- a/lisp/mh-e/mh-mime.el
+++ b/lisp/mh-e/mh-mime.el
@@ -508,6 +508,15 @@ decoding the same message multiple times."
508 (rfc2047-decode-region (point-min) (mh-mail-header-end))))) 508 (rfc2047-decode-region (point-min) (mh-mail-header-end)))))
509 509
510;;;###mh-autoload 510;;;###mh-autoload
511(defun mh-decode-message-subject ()
512 "Decode RFC2047 encoded message header fields."
513 (when mh-decode-mime-flag
514 (save-excursion
515 (let ((buffer-read-only nil))
516 (rfc2047-decode-region (progn (mh-goto-header-field "subject:") (point))
517 (progn (mh-header-field-end) (point)))))))
518
519;;;###mh-autoload
511(defun mh-mime-display (&optional pre-dissected-handles) 520(defun mh-mime-display (&optional pre-dissected-handles)
512 "Display (and possibly decode) MIME handles. 521 "Display (and possibly decode) MIME handles.
513Optional argument, PRE-DISSECTED-HANDLES is a list of MIME 522Optional argument, PRE-DISSECTED-HANDLES is a list of MIME
diff --git a/lisp/net/secrets.el b/lisp/net/secrets.el
index a7225d663e3..4487407971f 100644
--- a/lisp/net/secrets.el
+++ b/lisp/net/secrets.el
@@ -151,11 +151,11 @@
151 151
152(require 'dbus) 152(require 'dbus)
153 153
154(declare-function tree-widget-set-theme "tree-widget") 154(autoload 'tree-widget-set-theme "tree-widget")
155(declare-function widget-create-child-and-convert "wid-edit") 155(autoload 'widget-create-child-and-convert "wid-edit")
156(declare-function widget-default-value-set "wid-edit") 156(autoload 'widget-default-value-set "wid-edit")
157(declare-function widget-field-end "wid-edit") 157(autoload 'widget-field-end "wid-edit")
158(declare-function widget-member "wid-edit") 158(autoload 'widget-member "wid-edit")
159(defvar tree-widget-after-toggle-functions) 159(defvar tree-widget-after-toggle-functions)
160 160
161(defvar secrets-enabled nil 161(defvar secrets-enabled nil
@@ -563,7 +563,7 @@ The object paths of the found items are returned as list."
563 (setq props (add-to-list 563 (setq props (add-to-list
564 'props 564 'props
565 (list :dict-entry 565 (list :dict-entry
566 (symbol-name (car attributes)) 566 (substring (symbol-name (car attributes)) 1)
567 (cadr attributes)) 567 (cadr attributes))
568 'append) 568 'append)
569 attributes (cddr attributes))) 569 attributes (cddr attributes)))
@@ -601,7 +601,7 @@ The object path of the created item is returned."
601 (setq props (add-to-list 601 (setq props (add-to-list
602 'props 602 'props
603 (list :dict-entry 603 (list :dict-entry
604 (symbol-name (car attributes)) 604 (substring (symbol-name (car attributes)) 1)
605 (cadr attributes)) 605 (cadr attributes))
606 'append) 606 'append)
607 attributes (cddr attributes))) 607 attributes (cddr attributes)))
@@ -656,7 +656,8 @@ If there is no such item, or the item has no attributes, return nil."
656 (let ((item-path (secrets-item-path collection item))) 656 (let ((item-path (secrets-item-path collection item)))
657 (unless (secrets-empty-path item-path) 657 (unless (secrets-empty-path item-path)
658 (mapcar 658 (mapcar
659 (lambda (attribute) (cons (intern (car attribute)) (cadr attribute))) 659 (lambda (attribute)
660 (cons (intern (concat ":" (car attribute))) (cadr attribute)))
660 (dbus-get-property 661 (dbus-get-property
661 :session secrets-service item-path 662 :session secrets-service item-path
662 secrets-interface-item "Attributes"))))) 663 secrets-interface-item "Attributes")))))
@@ -678,13 +679,10 @@ If there is no such item, or the item doesn't own this attribute, return nil."
678;;; Visualization. 679;;; Visualization.
679 680
680(define-derived-mode secrets-mode nil "Secrets" 681(define-derived-mode secrets-mode nil "Secrets"
681 "Major mode for presenting search results of a Xesam search. 682 "Major mode for presenting password entries retrieved by Security Service.
682In this mode, widgets represent the search results. 683In this mode, widgets represent the search results.
683 684
684\\{secrets-mode-map} 685\\{secrets-mode-map}"
685Turning on Xesam mode runs the normal hook `xesam-mode-hook'. It
686can be used to set `xesam-notify-function', which must a search
687engine specific, widget :notify function to visualize xesam:url."
688 ;; Keymap. 686 ;; Keymap.
689 (setq secrets-mode-map (copy-keymap special-mode-map)) 687 (setq secrets-mode-map (copy-keymap special-mode-map))
690 (set-keymap-parent secrets-mode-map widget-keymap) 688 (set-keymap-parent secrets-mode-map widget-keymap)
@@ -707,19 +705,27 @@ engine specific, widget :notify function to visualize xesam:url."
707;; keymap etc. So we create a dummy buffer. Stupid. 705;; keymap etc. So we create a dummy buffer. Stupid.
708(with-temp-buffer (secrets-mode)) 706(with-temp-buffer (secrets-mode))
709 707
710;;;###autoload 708;; We autoload `secrets-show-secrets' only on systems with D-Bus support.
709;;;###autoload(when (featurep 'dbusbind)
710;;;###autoload (autoload 'secrets-show-secrets "secrets" nil t))
711
711(defun secrets-show-secrets () 712(defun secrets-show-secrets ()
712 "Display a list of collections from the Secret Service API. 713 "Display a list of collections from the Secret Service API.
713The collections are in tree view, that means they can be expanded 714The collections are in tree view, that means they can be expanded
714to the corresponding secret items, which could also be expanded 715to the corresponding secret items, which could also be expanded
715to their attributes." 716to their attributes."
716 (interactive) 717 (interactive)
717 ;; Create the search buffer. 718
718 (with-current-buffer (get-buffer-create "*Secrets*") 719 ;; Check, whether the Secret Service API is enabled.
719 (switch-to-buffer-other-window (current-buffer)) 720 (if (null secrets-enabled)
720 ;; Inialize buffer with `secrets-mode'. 721 (message "Secret Service not available")
721 (secrets-mode) 722
722 (secrets-show-collections))) 723 ;; Create the search buffer.
724 (with-current-buffer (get-buffer-create "*Secrets*")
725 (switch-to-buffer-other-window (current-buffer))
726 ;; Inialize buffer with `secrets-mode'.
727 (secrets-mode)
728 (secrets-show-collections))))
723 729
724(defun secrets-show-collections () 730(defun secrets-show-collections ()
725 "Show all available collections." 731 "Show all available collections."
@@ -757,14 +763,14 @@ to their attributes."
757 (attributes (secrets-get-attributes coll item)) 763 (attributes (secrets-get-attributes coll item))
758 ;; padding is needed to format attribute names. 764 ;; padding is needed to format attribute names.
759 (padding 765 (padding
760 (1+ 766 (apply
761 (apply 767 'max
762 'max 768 (cons
763 (cons 769 (1+ (length "password"))
764 (length "password") 770 (mapcar
765 (mapcar 771 ;; Atribute names have a leading ":", which will be suppressed.
766 (lambda (attribute) (length (symbol-name (car attribute)))) 772 (lambda (attribute) (length (symbol-name (car attribute))))
767 attributes)))))) 773 attributes)))))
768 (cons 774 (cons
769 ;; The password widget. 775 ;; The password widget.
770 `(editable-field :tag "password" 776 `(editable-field :tag "password"
@@ -779,7 +785,7 @@ to their attributes."
779 "%v\n")) 785 "%v\n"))
780 (mapcar 786 (mapcar
781 (lambda (attribute) 787 (lambda (attribute)
782 (let ((name (symbol-name (car attribute))) 788 (let ((name (substring (symbol-name (car attribute)) 1))
783 (value (cdr attribute))) 789 (value (cdr attribute)))
784 ;; The attribute widget. 790 ;; The attribute widget.
785 `(editable-field :tag ,name 791 `(editable-field :tag ,name
diff --git a/lisp/net/tramp-fish.el b/lisp/net/tramp-fish.el
index dd1947d5f1e..c7617252288 100644
--- a/lisp/net/tramp-fish.el
+++ b/lisp/net/tramp-fish.el
@@ -149,9 +149,12 @@
149;; parameter of `write-region'. Transfer of binary data fails due to 149;; parameter of `write-region'. Transfer of binary data fails due to
150;; Emacs' process input/output handling. 150;; Emacs' process input/output handling.
151 151
152
153;;; Code: 152;;; Code:
154 153
154(eval-when-compile
155 ;; Pacify byte-compiler.
156 (require 'cl))
157
155(require 'tramp) 158(require 'tramp)
156(require 'tramp-cache) 159(require 'tramp-cache)
157(require 'tramp-compat) 160(require 'tramp-compat)
@@ -487,13 +490,13 @@ pass to the OPERATION."
487 v 'file-error 490 v 'file-error
488 "Cannot make local copy of non-existing file `%s'" filename)) 491 "Cannot make local copy of non-existing file `%s'" filename))
489 (let ((tmpfile (tramp-compat-make-temp-file filename))) 492 (let ((tmpfile (tramp-compat-make-temp-file filename)))
490 (tramp-message v 4 "Fetching %s to tmp file %s..." filename tmpfile) 493 (with-progress-reporter
491 (when (tramp-fish-retrieve-data v) 494 v 3 (format "Fetching %s to tmp file %s" filename tmpfile)
492 ;; Save file 495 (when (tramp-fish-retrieve-data v)
493 (with-current-buffer (tramp-get-buffer v) 496 ;; Save file
494 (write-region (point-min) (point-max) tmpfile)) 497 (with-current-buffer (tramp-get-buffer v)
495 (tramp-message v 4 "Fetching %s to tmp file %s...done" filename tmpfile) 498 (write-region (point-min) (point-max) tmpfile))
496 tmpfile)))) 499 tmpfile)))))
497 500
498;; This function should return "foo/" for directories and "bar" for 501;; This function should return "foo/" for directories and "bar" for
499;; files. 502;; files.
@@ -591,17 +594,16 @@ WILDCARD and FULL-DIRECTORY-P are not handled."
591 594
592 (let ((point (point)) 595 (let ((point (point))
593 size) 596 size)
594 (tramp-message v 4 "Fetching file %s..." filename) 597 (with-progress-reporter v 3 (format "Fetching file %s" filename)
595 (when (tramp-fish-retrieve-data v) 598 (when (tramp-fish-retrieve-data v)
596 ;; Insert file 599 ;; Insert file
597 (insert 600 (insert
598 (with-current-buffer (tramp-get-buffer v) 601 (with-current-buffer (tramp-get-buffer v)
599 (let ((beg (or beg (point-min))) 602 (let ((beg (or beg (point-min)))
600 (end (min (or end (point-max)) (point-max)))) 603 (end (min (or end (point-max)) (point-max))))
601 (setq size (- end beg)) 604 (setq size (- end beg))
602 (buffer-substring beg end)))) 605 (buffer-substring beg end))))
603 (goto-char point)) 606 (goto-char point)))
604 (tramp-message v 4 "Fetching file %s...done" filename)
605 607
606 (list (expand-file-name filename) size))))) 608 (list (expand-file-name filename) size)))))
607 609
@@ -1115,34 +1117,36 @@ connection if a previous connection has died for some reason."
1115 (delete-process p)) 1117 (delete-process p))
1116 (setenv "TERM" tramp-terminal-type) 1118 (setenv "TERM" tramp-terminal-type)
1117 (setenv "PS1" tramp-initial-end-of-output) 1119 (setenv "PS1" tramp-initial-end-of-output)
1118 (tramp-message 1120 (with-progress-reporter
1119 vec 3 "Opening connection for %s@%s using %s..." 1121 vec 3
1120 tramp-current-user tramp-current-host tramp-current-method) 1122 (format "Opening connection for %s@%s using %s"
1121 1123 tramp-current-user tramp-current-host tramp-current-method)
1122 (let* ((process-connection-type tramp-process-connection-type) 1124
1123 (inhibit-eol-conversion nil) 1125 (let* ((process-connection-type tramp-process-connection-type)
1124 (coding-system-for-read 'binary) 1126 (inhibit-eol-conversion nil)
1125 (coding-system-for-write 'binary) 1127 (coding-system-for-read 'binary)
1126 ;; This must be done in order to avoid our file name handler. 1128 (coding-system-for-write 'binary)
1127 (p (let ((default-directory 1129 ;; This must be done in order to avoid our file name handler.
1128 (tramp-compat-temporary-file-directory))) 1130 (p (let ((default-directory
1129 (start-process 1131 (tramp-compat-temporary-file-directory)))
1130 (or (tramp-get-connection-property vec "process-name" nil) 1132 (start-process
1131 (tramp-buffer-name vec)) 1133 (or (tramp-get-connection-property vec "process-name" nil)
1132 (tramp-get-connection-buffer vec) 1134 (tramp-buffer-name vec))
1133 "ssh" "-l" 1135 (tramp-get-connection-buffer vec)
1134 (tramp-file-name-user vec) 1136 "ssh" "-l"
1135 (tramp-file-name-host vec))))) 1137 (tramp-file-name-user vec)
1136 (tramp-message vec 6 "%s" (mapconcat 'identity (process-command p) " ")) 1138 (tramp-file-name-host vec)))))
1137 1139 (tramp-message
1138 ;; Check whether process is alive. 1140 vec 6 "%s" (mapconcat 'identity (process-command p) " "))
1139 (tramp-set-process-query-on-exit-flag p nil) 1141
1140 1142 ;; Check whether process is alive.
1141 (tramp-process-actions p vec tramp-actions-before-shell 60) 1143 (tramp-set-process-query-on-exit-flag p nil)
1142 (tramp-fish-send-command vec tramp-fish-start-fish-server-command) 1144
1143 (tramp-message 1145 (tramp-process-actions p vec tramp-actions-before-shell 60)
1144 vec 3 1146 (tramp-fish-send-command vec tramp-fish-start-fish-server-command)
1145 "Found remote shell prompt on `%s'" (tramp-file-name-host vec)))))) 1147 (tramp-message
1148 vec 3
1149 "Found remote shell prompt on `%s'" (tramp-file-name-host vec)))))))
1146 1150
1147(defun tramp-fish-send-command (vec command) 1151(defun tramp-fish-send-command (vec command)
1148 "Send the COMMAND to connection VEC." 1152 "Send the COMMAND to connection VEC."
diff --git a/lisp/net/tramp-gvfs.el b/lisp/net/tramp-gvfs.el
index 0851f3fe86c..6607dae32f5 100644
--- a/lisp/net/tramp-gvfs.el
+++ b/lisp/net/tramp-gvfs.el
@@ -1067,65 +1067,58 @@ connection if a previous connection has died for some reason."
1067 (tramp-gvfs-object-path 1067 (tramp-gvfs-object-path
1068 (tramp-make-tramp-file-name method user host "")))) 1068 (tramp-make-tramp-file-name method user host ""))))
1069 1069
1070 (if (zerop (length (tramp-file-name-user vec))) 1070 (with-progress-reporter
1071 (tramp-message 1071 vec 3
1072 vec 3 "Opening connection for %s using %s..." host method) 1072 (if (zerop (length user))
1073 (tramp-message 1073 (format "Opening connection for %s using %s" host method)
1074 vec 3 "Opening connection for %s@%s using %s..." user host method)) 1074 (format "Opening connection for %s@%s using %s" user host method))
1075 1075
1076 ;; Enable auth-sorce and password-cache. 1076 ;; Enable auth-sorce and password-cache.
1077 (tramp-set-connection-property vec "first-password-request" t) 1077 (tramp-set-connection-property vec "first-password-request" t)
1078 1078
1079 ;; There will be a callback of "askPassword", when a password is 1079 ;; There will be a callback of "askPassword", when a password is
1080 ;; needed. 1080 ;; needed.
1081 (dbus-register-method 1081 (dbus-register-method
1082 :session dbus-service-emacs object-path 1082 :session dbus-service-emacs object-path
1083 tramp-gvfs-interface-mountoperation "askPassword" 1083 tramp-gvfs-interface-mountoperation "askPassword"
1084 'tramp-gvfs-handler-askpassword) 1084 'tramp-gvfs-handler-askpassword)
1085 1085
1086 ;; There could be a callback of "askQuestion", when adding fingerprint. 1086 ;; There could be a callback of "askQuestion", when adding fingerprint.
1087 (dbus-register-method 1087 (dbus-register-method
1088 :session dbus-service-emacs object-path 1088 :session dbus-service-emacs object-path
1089 tramp-gvfs-interface-mountoperation "askQuestion" 1089 tramp-gvfs-interface-mountoperation "askQuestion"
1090 'tramp-gvfs-handler-askquestion) 1090 'tramp-gvfs-handler-askquestion)
1091 1091
1092 ;; The call must be asynchronously, because of the "askPassword" 1092 ;; The call must be asynchronously, because of the "askPassword"
1093 ;; or "askQuestion"callbacks. 1093 ;; or "askQuestion"callbacks.
1094 (with-tramp-dbus-call-method vec nil 1094 (with-tramp-dbus-call-method vec nil
1095 :session tramp-gvfs-service-daemon tramp-gvfs-path-mounttracker 1095 :session tramp-gvfs-service-daemon tramp-gvfs-path-mounttracker
1096 tramp-gvfs-interface-mounttracker "mountLocation" 1096 tramp-gvfs-interface-mounttracker "mountLocation"
1097 `(:struct 1097 `(:struct
1098 ,(dbus-string-to-byte-array "/") 1098 ,(dbus-string-to-byte-array "/")
1099 ,(tramp-gvfs-mount-spec vec)) 1099 ,(tramp-gvfs-mount-spec vec))
1100 (dbus-get-unique-name :session) 1100 (dbus-get-unique-name :session)
1101 :object-path object-path) 1101 :object-path object-path)
1102 1102
1103 ;; We must wait, until the mount is applied. This will be 1103 ;; We must wait, until the mount is applied. This will be
1104 ;; indicated by the "mounted" signal, i.e. the "fuse-mountpoint" 1104 ;; indicated by the "mounted" signal, i.e. the "fuse-mountpoint"
1105 ;; file property. 1105 ;; file property.
1106 (with-timeout 1106 (with-timeout
1107 (60 1107 (60
1108 (if (zerop (length (tramp-file-name-user vec))) 1108 (if (zerop (length (tramp-file-name-user vec)))
1109 (tramp-error
1110 vec 'file-error
1111 "Timeout reached mounting %s using %s" host method)
1109 (tramp-error 1112 (tramp-error
1110 vec 'file-error 1113 vec 'file-error
1111 "Timeout reached mounting %s using %s" host method) 1114 "Timeout reached mounting %s@%s using %s" user host method)))
1112 (tramp-error 1115 (while (not (tramp-get-file-property vec "/" "fuse-mountpoint" nil))
1113 vec 'file-error 1116 (read-event nil nil 0.1)))
1114 "Timeout reached mounting %s@%s using %s" user host method))) 1117
1115 (while (not (tramp-get-file-property vec "/" "fuse-mountpoint" nil)) 1118 ;; We set the connection property "started" in order to put the
1116 (read-event nil nil 0.1))) 1119 ;; remote location into the cache, which is helpful for further
1117 1120 ;; completion.
1118 ;; We set the connection property "started" in order to put the 1121 (tramp-set-connection-property vec "started" t)))))
1119 ;; remote location into the cache, which is helpful for further
1120 ;; completion.
1121 (tramp-set-connection-property vec "started" t)
1122
1123 (if (zerop (length (tramp-file-name-user vec)))
1124 (tramp-message
1125 vec 3 "Opening connection for %s using %s...done" host method)
1126 (tramp-message
1127 vec 3
1128 "Opening connection for %s@%s using %s...done" user host method)))))
1129 1122
1130 1123
1131;; D-Bus BLUEZ functions. 1124;; D-Bus BLUEZ functions.
diff --git a/lisp/net/tramp-imap.el b/lisp/net/tramp-imap.el
index 68e181ae7d5..e1e91365792 100644
--- a/lisp/net/tramp-imap.el
+++ b/lisp/net/tramp-imap.el
@@ -241,32 +241,31 @@ of `copy' and `rename'."
241 (t2 (and (tramp-tramp-file-p newname) 241 (t2 (and (tramp-tramp-file-p newname)
242 (tramp-imap-file-name-p newname)))) 242 (tramp-imap-file-name-p newname))))
243 243
244 (when (and (not ok-if-already-exists) (file-exists-p newname))
245 (with-parsed-tramp-file-name (if t1 filename newname) nil
246 (tramp-error
247 v 'file-already-exists "File %s already exists" newname)))
248
249 (with-parsed-tramp-file-name (if t1 filename newname) nil
250 (tramp-message v 0 "Transferring %s to %s..." filename newname))
251
252 ;; We just make a local copy of FILENAME, and write it then to
253 ;; NEWNAME. This must be optimized, when both files are located
254 ;; on the same IMAP server.
255 (with-temp-buffer
256 (if (and t1 t2)
257 ;; We don't encrypt.
258 (with-parsed-tramp-file-name newname nil
259 (insert (tramp-imap-get-file filename nil))
260 (tramp-imap-put-file
261 v (current-buffer)
262 (tramp-imap-file-name-name v)
263 nil nil (nth 7 (file-attributes filename))))
264 ;; One of them is not located on a IMAP mailbox.
265 (insert-file-contents filename)
266 (write-region (point-min) (point-max) newname)))
267
268 (with-parsed-tramp-file-name (if t1 filename newname) nil 244 (with-parsed-tramp-file-name (if t1 filename newname) nil
269 (tramp-message v 0 "Transferring %s to %s...done" filename newname)) 245 (when (and (not ok-if-already-exists) (file-exists-p newname))
246 (tramp-error
247 v 'file-already-exists "File %s already exists" newname))
248
249 (with-progress-reporter
250 v 0 (format "%s %s to %s"
251 (if (eq op 'copy) "Copying" "Renaming")
252 filename newname)
253
254 ;; We just make a local copy of FILENAME, and write it then to
255 ;; NEWNAME. This must be optimized, when both files are
256 ;; located on the same IMAP server.
257 (with-temp-buffer
258 (if (and t1 t2)
259 ;; We don't encrypt.
260 (with-parsed-tramp-file-name newname v1
261 (insert (tramp-imap-get-file filename nil))
262 (tramp-imap-put-file
263 v1 (current-buffer)
264 (tramp-imap-file-name-name v1)
265 nil nil (nth 7 (file-attributes filename))))
266 ;; One of them is not located on a IMAP mailbox.
267 (insert-file-contents filename)
268 (write-region (point-min) (point-max) newname)))))
270 269
271 (when (eq op 'rename) 270 (when (eq op 'rename)
272 (tramp-compat-delete-file filename 'force)))) 271 (tramp-compat-delete-file filename 'force))))
@@ -505,17 +504,16 @@ SIZE MODE WEIRD INODE DEVICE)."
505 v 'file-error "File `%s' not found on remote host" filename) 504 v 'file-error "File `%s' not found on remote host" filename)
506 (let ((point (point)) 505 (let ((point (point))
507 size data) 506 size data)
508 (tramp-message v 4 "Fetching file %s..." filename) 507 (with-progress-reporter v 3 (format "Fetching file %s" filename)
509 (insert (tramp-imap-get-file filename t)) 508 (insert (tramp-imap-get-file filename t))
510 (setq size (- (point) point)) 509 (setq size (- (point) point))
511;;; TODO: handle ranges. 510;;; TODO: handle ranges.
512;;; (let ((beg (or beg (point-min))) 511;;; (let ((beg (or beg (point-min)))
513;;; (end (min (or end (point-max)) (point-max)))) 512;;; (end (min (or end (point-max)) (point-max))))
514;;; (setq size (- end beg)) 513;;; (setq size (- end beg))
515;;; (buffer-substring beg end)) 514;;; (buffer-substring beg end))
516 (goto-char point) 515 (goto-char point)
517 (tramp-message v 4 "Fetching file %s...done" filename) 516 (list (expand-file-name filename) size))))))
518 (list (expand-file-name filename) size)))))
519 517
520(defun tramp-imap-handle-file-exists-p (filename) 518(defun tramp-imap-handle-file-exists-p (filename)
521 "Like `file-exists-p' for Tramp files." 519 "Like `file-exists-p' for Tramp files."
@@ -588,12 +586,12 @@ SIZE MODE WEIRD INODE DEVICE)."
588 v 'file-error 586 v 'file-error
589 "Cannot make local copy of non-existing file `%s'" filename)) 587 "Cannot make local copy of non-existing file `%s'" filename))
590 (let ((tmpfile (tramp-compat-make-temp-file filename))) 588 (let ((tmpfile (tramp-compat-make-temp-file filename)))
591 (tramp-message v 4 "Fetching %s to tmp file %s..." filename tmpfile) 589 (with-progress-reporter
592 (with-temp-buffer 590 v 3 (format "Fetching %s to tmp file %s" filename tmpfile)
593 (insert-file-contents filename) 591 (with-temp-buffer
594 (write-region (point-min) (point-max) tmpfile) 592 (insert-file-contents filename)
595 (tramp-message v 4 "Fetching %s to tmp file %s...done" filename tmpfile) 593 (write-region (point-min) (point-max) tmpfile)
596 tmpfile)))) 594 tmpfile)))))
597 595
598(defun tramp-imap-put-file 596(defun tramp-imap-put-file
599 (vec filename-or-buffer &optional subject inode encode size) 597 (vec filename-or-buffer &optional subject inode encode size)
diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el
index c5addae8e5d..d643e85ec24 100644
--- a/lisp/net/tramp.el
+++ b/lisp/net/tramp.el
@@ -334,6 +334,7 @@ detected as prompt when being sent on echoing hosts, therefore.")
334 ("scp" (tramp-login-program "ssh") 334 ("scp" (tramp-login-program "ssh")
335 (tramp-login-args (("%h") ("-l" "%u") ("-p" "%p") 335 (tramp-login-args (("%h") ("-l" "%u") ("-p" "%p")
336 ("-e" "none"))) 336 ("-e" "none")))
337 (tramp-async-args (("-q")))
337 (tramp-remote-sh "/bin/sh") 338 (tramp-remote-sh "/bin/sh")
338 (tramp-copy-program "scp") 339 (tramp-copy-program "scp")
339 (tramp-copy-args (("-P" "%p") ("-p" "%k") 340 (tramp-copy-args (("-P" "%p") ("-p" "%k")
@@ -349,6 +350,7 @@ detected as prompt when being sent on echoing hosts, therefore.")
349 ("scp1" (tramp-login-program "ssh") 350 ("scp1" (tramp-login-program "ssh")
350 (tramp-login-args (("%h") ("-l" "%u") ("-p" "%p") 351 (tramp-login-args (("%h") ("-l" "%u") ("-p" "%p")
351 ("-1" "-e" "none"))) 352 ("-1" "-e" "none")))
353 (tramp-async-args (("-q")))
352 (tramp-remote-sh "/bin/sh") 354 (tramp-remote-sh "/bin/sh")
353 (tramp-copy-program "scp") 355 (tramp-copy-program "scp")
354 (tramp-copy-args (("-1") ("-P" "%p") ("-p" "%k") 356 (tramp-copy-args (("-1") ("-P" "%p") ("-p" "%k")
@@ -364,6 +366,7 @@ detected as prompt when being sent on echoing hosts, therefore.")
364 ("scp2" (tramp-login-program "ssh") 366 ("scp2" (tramp-login-program "ssh")
365 (tramp-login-args (("%h") ("-l" "%u") ("-p" "%p") 367 (tramp-login-args (("%h") ("-l" "%u") ("-p" "%p")
366 ("-2" "-e" "none"))) 368 ("-2" "-e" "none")))
369 (tramp-async-args (("-q")))
367 (tramp-remote-sh "/bin/sh") 370 (tramp-remote-sh "/bin/sh")
368 (tramp-copy-program "scp") 371 (tramp-copy-program "scp")
369 (tramp-copy-args (("-2") ("-P" "%p") ("-p" "%k") 372 (tramp-copy-args (("-2") ("-P" "%p") ("-p" "%k")
@@ -399,6 +402,7 @@ detected as prompt when being sent on echoing hosts, therefore.")
399 ("sftp" (tramp-login-program "ssh") 402 ("sftp" (tramp-login-program "ssh")
400 (tramp-login-args (("%h") ("-l" "%u") ("-p" "%p") 403 (tramp-login-args (("%h") ("-l" "%u") ("-p" "%p")
401 ("-e" "none"))) 404 ("-e" "none")))
405 (tramp-async-args (("-q")))
402 (tramp-remote-sh "/bin/sh") 406 (tramp-remote-sh "/bin/sh")
403 (tramp-copy-program "sftp") 407 (tramp-copy-program "sftp")
404 (tramp-copy-args nil) 408 (tramp-copy-args nil)
@@ -407,6 +411,7 @@ detected as prompt when being sent on echoing hosts, therefore.")
407 ("rsync" (tramp-login-program "ssh") 411 ("rsync" (tramp-login-program "ssh")
408 (tramp-login-args (("%h") ("-l" "%u") ("-p" "%p") 412 (tramp-login-args (("%h") ("-l" "%u") ("-p" "%p")
409 ("-e" "none"))) 413 ("-e" "none")))
414 (tramp-async-args (("-q")))
410 (tramp-remote-sh "/bin/sh") 415 (tramp-remote-sh "/bin/sh")
411 (tramp-copy-program "rsync") 416 (tramp-copy-program "rsync")
412 (tramp-copy-args (("-e" "ssh") ("-t" "%k") ("-r"))) 417 (tramp-copy-args (("-e" "ssh") ("-t" "%k") ("-r")))
@@ -420,6 +425,7 @@ detected as prompt when being sent on echoing hosts, therefore.")
420 ("-o" "ControlPath=%t.%%r@%%h:%%p") 425 ("-o" "ControlPath=%t.%%r@%%h:%%p")
421 ("-o" "ControlMaster=yes") 426 ("-o" "ControlMaster=yes")
422 ("-e" "none"))) 427 ("-e" "none")))
428 (tramp-async-args (("-q")))
423 (tramp-remote-sh "/bin/sh") 429 (tramp-remote-sh "/bin/sh")
424 (tramp-copy-program "rsync") 430 (tramp-copy-program "rsync")
425 (tramp-copy-args (("-t" "%k") ("-r"))) 431 (tramp-copy-args (("-t" "%k") ("-r")))
@@ -449,6 +455,7 @@ detected as prompt when being sent on echoing hosts, therefore.")
449 ("ssh" (tramp-login-program "ssh") 455 ("ssh" (tramp-login-program "ssh")
450 (tramp-login-args (("%h") ("-l" "%u") ("-p" "%p") 456 (tramp-login-args (("%h") ("-l" "%u") ("-p" "%p")
451 ("-e" "none"))) 457 ("-e" "none")))
458 (tramp-async-args (("-q")))
452 (tramp-remote-sh "/bin/sh") 459 (tramp-remote-sh "/bin/sh")
453 (tramp-copy-program nil) 460 (tramp-copy-program nil)
454 (tramp-copy-args nil) 461 (tramp-copy-args nil)
@@ -462,6 +469,7 @@ detected as prompt when being sent on echoing hosts, therefore.")
462 ("ssh1" (tramp-login-program "ssh") 469 ("ssh1" (tramp-login-program "ssh")
463 (tramp-login-args (("%h") ("-l" "%u") ("-p" "%p") 470 (tramp-login-args (("%h") ("-l" "%u") ("-p" "%p")
464 ("-1" "-e" "none"))) 471 ("-1" "-e" "none")))
472 (tramp-async-args (("-q")))
465 (tramp-remote-sh "/bin/sh") 473 (tramp-remote-sh "/bin/sh")
466 (tramp-copy-program nil) 474 (tramp-copy-program nil)
467 (tramp-copy-args nil) 475 (tramp-copy-args nil)
@@ -475,6 +483,7 @@ detected as prompt when being sent on echoing hosts, therefore.")
475 ("ssh2" (tramp-login-program "ssh") 483 ("ssh2" (tramp-login-program "ssh")
476 (tramp-login-args (("%h") ("-l" "%u") ("-p" "%p") 484 (tramp-login-args (("%h") ("-l" "%u") ("-p" "%p")
477 ("-2" "-e" "none"))) 485 ("-2" "-e" "none")))
486 (tramp-async-args (("-q")))
478 (tramp-remote-sh "/bin/sh") 487 (tramp-remote-sh "/bin/sh")
479 (tramp-copy-program nil) 488 (tramp-copy-program nil)
480 (tramp-copy-args nil) 489 (tramp-copy-args nil)
@@ -489,6 +498,7 @@ detected as prompt when being sent on echoing hosts, therefore.")
489 (tramp-login-program "ssh1") 498 (tramp-login-program "ssh1")
490 (tramp-login-args (("%h") ("-l" "%u") ("-p" "%p") 499 (tramp-login-args (("%h") ("-l" "%u") ("-p" "%p")
491 ("-e" "none"))) 500 ("-e" "none")))
501 (tramp-async-args (("-q")))
492 (tramp-remote-sh "/bin/sh") 502 (tramp-remote-sh "/bin/sh")
493 (tramp-copy-program nil) 503 (tramp-copy-program nil)
494 (tramp-copy-args nil) 504 (tramp-copy-args nil)
@@ -539,6 +549,7 @@ detected as prompt when being sent on echoing hosts, therefore.")
539 ("-o" "ControlPath=%t.%%r@%%h:%%p") 549 ("-o" "ControlPath=%t.%%r@%%h:%%p")
540 ("-o" "ControlMaster=yes") 550 ("-o" "ControlMaster=yes")
541 ("-e" "none"))) 551 ("-e" "none")))
552 (tramp-async-args (("-q")))
542 (tramp-remote-sh "/bin/sh") 553 (tramp-remote-sh "/bin/sh")
543 (tramp-copy-program "scp") 554 (tramp-copy-program "scp")
544 (tramp-copy-args (("-P" "%p") ("-p" "%k") ("-q") 555 (tramp-copy-args (("-P" "%p") ("-p" "%k") ("-q")
@@ -554,6 +565,7 @@ detected as prompt when being sent on echoing hosts, therefore.")
554 ("scpx" (tramp-login-program "ssh") 565 ("scpx" (tramp-login-program "ssh")
555 (tramp-login-args (("%h") ("-l" "%u") ("-p" "%p") 566 (tramp-login-args (("%h") ("-l" "%u") ("-p" "%p")
556 ("-e" "none" "-t" "-t" "/bin/sh"))) 567 ("-e" "none" "-t" "-t" "/bin/sh")))
568 (tramp-async-args (("-q")))
557 (tramp-remote-sh "/bin/sh") 569 (tramp-remote-sh "/bin/sh")
558 (tramp-copy-program "scp") 570 (tramp-copy-program "scp")
559 (tramp-copy-args (("-p" "%k"))) 571 (tramp-copy-args (("-p" "%k")))
@@ -567,6 +579,7 @@ detected as prompt when being sent on echoing hosts, therefore.")
567 ("sshx" (tramp-login-program "ssh") 579 ("sshx" (tramp-login-program "ssh")
568 (tramp-login-args (("%h") ("-l" "%u") ("-p" "%p") 580 (tramp-login-args (("%h") ("-l" "%u") ("-p" "%p")
569 ("-e" "none" "-t" "-t" "/bin/sh"))) 581 ("-e" "none" "-t" "-t" "/bin/sh")))
582 (tramp-async-args (("-q")))
570 (tramp-remote-sh "/bin/sh") 583 (tramp-remote-sh "/bin/sh")
571 (tramp-copy-program nil) 584 (tramp-copy-program nil)
572 (tramp-copy-args nil) 585 (tramp-copy-args nil)
@@ -672,6 +685,11 @@ pair of the form (KEY VALUE). The following KEYs are defined:
672 \"%t\" is replaced by the temporary file name produced with 685 \"%t\" is replaced by the temporary file name produced with
673 `tramp-make-tramp-temp-file'. \"%k\" indicates the keep-date 686 `tramp-make-tramp-temp-file'. \"%k\" indicates the keep-date
674 parameter of a program, if exists. 687 parameter of a program, if exists.
688 * `tramp-async-args'
689 When an asynchronous process is started, we know already that
690 the connection works. Therefore, we can pass additional
691 parameters to suppress diagnostic messages, in order not to
692 tamper the process output.
675 * `tramp-copy-program' 693 * `tramp-copy-program'
676 This specifies the name of the program to use for remotely copying 694 This specifies the name of the program to use for remotely copying
677 the file; this might be the absolute filename of rcp or the name of 695 the file; this might be the absolute filename of rcp or the name of
@@ -3641,85 +3659,86 @@ and `rename'. FILENAME and NEWNAME must be absolute file names."
3641 (apply 'file-selinux-context (list filename)))) 3659 (apply 'file-selinux-context (list filename))))
3642 pr tm) 3660 pr tm)
3643 3661
3644 (when (and (not ok-if-already-exists) (file-exists-p newname)) 3662 (with-parsed-tramp-file-name (if t1 filename newname) nil
3645 (with-parsed-tramp-file-name (if t1 filename newname) nil 3663 (when (and (not ok-if-already-exists) (file-exists-p newname))
3646 (tramp-error 3664 (tramp-error
3647 v 'file-already-exists "File %s already exists" newname))) 3665 v 'file-already-exists "File %s already exists" newname))
3648 3666
3649 (with-parsed-tramp-file-name (if t1 filename newname) nil
3650 (with-progress-reporter 3667 (with-progress-reporter
3651 v 0 (format "Transferring %s to %s" filename newname) 3668 v 0 (format "%s %s to %s"
3669 (if (eq op 'copy) "Copying" "Renaming")
3670 filename newname)
3652 3671
3653 (cond 3672 (cond
3654 ;; Both are Tramp files. 3673 ;; Both are Tramp files.
3655 ((and t1 t2) 3674 ((and t1 t2)
3656 (with-parsed-tramp-file-name filename v1 3675 (with-parsed-tramp-file-name filename v1
3657 (with-parsed-tramp-file-name newname v2 3676 (with-parsed-tramp-file-name newname v2
3658 (cond 3677 (cond
3659 ;; Shortcut: if method, host, user are the same for both 3678 ;; Shortcut: if method, host, user are the same for
3660 ;; files, we invoke `cp' or `mv' on the remote host 3679 ;; both files, we invoke `cp' or `mv' on the remote
3661 ;; directly. 3680 ;; host directly.
3662 ((tramp-equal-remote filename newname) 3681 ((tramp-equal-remote filename newname)
3663 (tramp-do-copy-or-rename-file-directly 3682 (tramp-do-copy-or-rename-file-directly
3664 op filename newname 3683 op filename newname
3665 ok-if-already-exists keep-date preserve-uid-gid)) 3684 ok-if-already-exists keep-date preserve-uid-gid))
3666 3685
3667 ;; Try out-of-band operation. 3686 ;; Try out-of-band operation.
3668 ((tramp-method-out-of-band-p 3687 ((tramp-method-out-of-band-p
3669 v1 (nth 7 (file-attributes filename))) 3688 v1 (nth 7 (file-attributes filename)))
3670 (tramp-do-copy-or-rename-file-out-of-band 3689 (tramp-do-copy-or-rename-file-out-of-band
3671 op filename newname keep-date)) 3690 op filename newname keep-date))
3672 3691
3673 ;; No shortcut was possible. So we copy the 3692 ;; No shortcut was possible. So we copy the file
3674 ;; file first. If the operation was `rename', we go 3693 ;; first. If the operation was `rename', we go back
3675 ;; back and delete the original file (if the copy was 3694 ;; and delete the original file (if the copy was
3676 ;; successful). The approach is simple-minded: we 3695 ;; successful). The approach is simple-minded: we
3677 ;; create a new buffer, insert the contents of the 3696 ;; create a new buffer, insert the contents of the
3678 ;; source file into it, then write out the buffer to 3697 ;; source file into it, then write out the buffer to
3679 ;; the target file. The advantage is that it doesn't 3698 ;; the target file. The advantage is that it doesn't
3680 ;; matter which filename handlers are used for the 3699 ;; matter which filename handlers are used for the
3681 ;; source and target file. 3700 ;; source and target file.
3682 (t 3701 (t
3683 (tramp-do-copy-or-rename-file-via-buffer 3702 (tramp-do-copy-or-rename-file-via-buffer
3684 op filename newname keep-date)))))) 3703 op filename newname keep-date))))))
3685 3704
3686 ;; One file is a Tramp file, the other one is local. 3705 ;; One file is a Tramp file, the other one is local.
3687 ((or t1 t2) 3706 ((or t1 t2)
3688 (cond 3707 (cond
3689 ;; Fast track on local machine. 3708 ;; Fast track on local machine.
3690 ((tramp-local-host-p v) 3709 ((tramp-local-host-p v)
3691 (tramp-do-copy-or-rename-file-directly 3710 (tramp-do-copy-or-rename-file-directly
3692 op filename newname 3711 op filename newname
3693 ok-if-already-exists keep-date preserve-uid-gid)) 3712 ok-if-already-exists keep-date preserve-uid-gid))
3694 3713
3695 ;; If the Tramp file has an out-of-band method, the corresponding 3714 ;; If the Tramp file has an out-of-band method, the
3696 ;; copy-program can be invoked. 3715 ;; corresponding copy-program can be invoked.
3697 ((tramp-method-out-of-band-p v (nth 7 (file-attributes filename))) 3716 ((tramp-method-out-of-band-p v (nth 7 (file-attributes filename)))
3698 (tramp-do-copy-or-rename-file-out-of-band 3717 (tramp-do-copy-or-rename-file-out-of-band
3699 op filename newname keep-date)) 3718 op filename newname keep-date))
3700 3719
3701 ;; Use the inline method via a Tramp buffer. 3720 ;; Use the inline method via a Tramp buffer.
3702 (t (tramp-do-copy-or-rename-file-via-buffer 3721 (t (tramp-do-copy-or-rename-file-via-buffer
3703 op filename newname keep-date)))) 3722 op filename newname keep-date))))
3704 3723
3705 (t 3724 (t
3706 ;; One of them must be a Tramp file. 3725 ;; One of them must be a Tramp file.
3707 (error "Tramp implementation says this cannot happen"))) 3726 (error "Tramp implementation says this cannot happen")))
3708 3727
3709 ;; Handle `preserve-selinux-context'. 3728 ;; Handle `preserve-selinux-context'.
3710 (when context (apply 'set-file-selinux-context (list newname context))) 3729 (when context (apply 'set-file-selinux-context (list newname context)))
3711 3730
3712 ;; In case of `rename', we must flush the cache of the source file. 3731 ;; In case of `rename', we must flush the cache of the source file.
3713 (when (and t1 (eq op 'rename)) 3732 (when (and t1 (eq op 'rename))
3714 (with-parsed-tramp-file-name filename v1 3733 (with-parsed-tramp-file-name filename v1
3715 (tramp-flush-file-property v1 (file-name-directory localname)) 3734 (tramp-flush-file-property v1 (file-name-directory localname))
3716 (tramp-flush-file-property v1 localname))) 3735 (tramp-flush-file-property v1 localname)))
3717 3736
3718 ;; When newname did exist, we have wrong cached values. 3737 ;; When newname did exist, we have wrong cached values.
3719 (when t2 3738 (when t2
3720 (with-parsed-tramp-file-name newname v2 3739 (with-parsed-tramp-file-name newname v2
3721 (tramp-flush-file-property v2 (file-name-directory localname)) 3740 (tramp-flush-file-property v2 (file-name-directory localname))
3722 (tramp-flush-file-property v2 localname))))))) 3741 (tramp-flush-file-property v2 localname)))))))
3723 3742
3724(defun tramp-do-copy-or-rename-file-via-buffer (op filename newname keep-date) 3743(defun tramp-do-copy-or-rename-file-via-buffer (op filename newname keep-date)
3725 "Use an Emacs buffer to copy or rename a file. 3744 "Use an Emacs buffer to copy or rename a file.
@@ -4752,7 +4771,7 @@ Lisp error raised when PROGRAM is nil is trapped also, returning 1."
4752 (rem-enc 4771 (rem-enc
4753 (save-excursion 4772 (save-excursion
4754 (with-progress-reporter 4773 (with-progress-reporter
4755 v 5 (format "Encoding remote file %s" filename) 4774 v 3 (format "Encoding remote file %s" filename)
4756 (tramp-barf-unless-okay 4775 (tramp-barf-unless-okay
4757 v (format rem-enc (tramp-shell-quote-argument localname)) 4776 v (format rem-enc (tramp-shell-quote-argument localname))
4758 "Encoding remote file failed")) 4777 "Encoding remote file failed"))
@@ -5323,46 +5342,50 @@ Returns a file name in `tramp-auto-save-directory' for autosaving this file."
5323;; any other remote command. 5342;; any other remote command.
5324(defun tramp-handle-vc-registered (file) 5343(defun tramp-handle-vc-registered (file)
5325 "Like `vc-registered' for Tramp files." 5344 "Like `vc-registered' for Tramp files."
5326 (with-parsed-tramp-file-name file nil 5345 (with-temp-message ""
5327 5346 (with-parsed-tramp-file-name file nil
5328 ;; There could be new files, created by the vc backend. We cannot 5347 (with-progress-reporter
5329 ;; reuse the old cache entries, therefore. 5348 v 3 (format "Checking `vc-registered' for %s" file)
5330 (let (tramp-vc-registered-file-names 5349
5331 (tramp-cache-inhibit-cache (current-time)) 5350 ;; There could be new files, created by the vc backend. We
5332 (file-name-handler-alist 5351 ;; cannot reuse the old cache entries, therefore.
5333 `((,tramp-file-name-regexp . tramp-vc-file-name-handler)))) 5352 (let (tramp-vc-registered-file-names
5334 5353 (tramp-cache-inhibit-cache (current-time))
5335 ;; Here we collect only file names, which need an operation. 5354 (file-name-handler-alist
5336 (tramp-run-real-handler 'vc-registered (list file)) 5355 `((,tramp-file-name-regexp . tramp-vc-file-name-handler))))
5337 (tramp-message v 10 "\n%s" tramp-vc-registered-file-names) 5356
5338 5357 ;; Here we collect only file names, which need an operation.
5339 ;; Send just one command, in order to fill the cache. 5358 (tramp-run-real-handler 'vc-registered (list file))
5340 (when tramp-vc-registered-file-names 5359 (tramp-message v 10 "\n%s" tramp-vc-registered-file-names)
5341 (tramp-maybe-send-script 5360
5342 v 5361 ;; Send just one command, in order to fill the cache.
5343 (format tramp-vc-registered-read-file-names 5362 (when tramp-vc-registered-file-names
5344 (tramp-get-file-exists-command v) 5363 (tramp-maybe-send-script
5345 (format "%s -r" (tramp-get-test-command v))) 5364 v
5346 "tramp_vc_registered_read_file_names") 5365 (format tramp-vc-registered-read-file-names
5347 5366 (tramp-get-file-exists-command v)
5348 (dolist 5367 (format "%s -r" (tramp-get-test-command v)))
5349 (elt 5368 "tramp_vc_registered_read_file_names")
5350 (tramp-send-command-and-read 5369
5351 v 5370 (dolist
5352 (format 5371 (elt
5353 "tramp_vc_registered_read_file_names %s" 5372 (tramp-send-command-and-read
5354 (mapconcat 'tramp-shell-quote-argument 5373 v
5355 tramp-vc-registered-file-names 5374 (format
5356 " ")))) 5375 "tramp_vc_registered_read_file_names %s"
5357 5376 (mapconcat 'tramp-shell-quote-argument
5358 (tramp-set-file-property v (car elt) (cadr elt) (cadr (cdr elt)))))) 5377 tramp-vc-registered-file-names
5359 5378 " "))))
5360 ;; Second run. Now all `file-exists-p' or `file-readable-p' calls 5379
5361 ;; shall be answered from the file cache. 5380 (tramp-set-file-property
5362 ;; We unset `process-file-side-effects' in order to keep the cache 5381 v (car elt) (cadr elt) (cadr (cdr elt))))))
5363 ;; when `process-file' calls appear. 5382
5364 (let (process-file-side-effects) 5383 ;; Second run. Now all `file-exists-p' or `file-readable-p'
5365 (tramp-run-real-handler 'vc-registered (list file))))) 5384 ;; calls shall be answered from the file cache. We unset
5385 ;; `process-file-side-effects' in order to keep the cache when
5386 ;; `process-file' calls appear.
5387 (let (process-file-side-effects)
5388 (tramp-run-real-handler 'vc-registered (list file)))))))
5366 5389
5367;;;###autoload 5390;;;###autoload
5368(progn (defun tramp-run-real-handler (operation args) 5391(progn (defun tramp-run-real-handler (operation args)
@@ -7380,6 +7403,7 @@ Does not do anything if a connection is already open, but re-opens the
7380connection if a previous connection has died for some reason." 7403connection if a previous connection has died for some reason."
7381 (catch 'uname-changed 7404 (catch 'uname-changed
7382 (let ((p (tramp-get-connection-process vec)) 7405 (let ((p (tramp-get-connection-process vec))
7406 (process-name (tramp-get-connection-property vec "process-name" nil))
7383 (process-environment (copy-sequence process-environment))) 7407 (process-environment (copy-sequence process-environment)))
7384 7408
7385 ;; If too much time has passed since last command was sent, look 7409 ;; If too much time has passed since last command was sent, look
@@ -7413,126 +7437,135 @@ connection if a previous connection has died for some reason."
7413 ;; We call `tramp-get-buffer' in order to get a debug buffer for 7437 ;; We call `tramp-get-buffer' in order to get a debug buffer for
7414 ;; messages from the beginning. 7438 ;; messages from the beginning.
7415 (tramp-get-buffer vec) 7439 (tramp-get-buffer vec)
7416 (if (zerop (length (tramp-file-name-user vec))) 7440 (with-progress-reporter
7417 (tramp-message 7441 vec 3
7418 vec 3 "Opening connection for %s using %s" 7442 (if (zerop (length (tramp-file-name-user vec)))
7419 (tramp-file-name-host vec) 7443 (format "Opening connection for %s using %s"
7420 (tramp-file-name-method vec)) 7444 (tramp-file-name-host vec)
7421 (tramp-message 7445 (tramp-file-name-method vec))
7422 vec 3 "Opening connection for %s@%s using %s" 7446 (format "Opening connection for %s@%s using %s"
7423 (tramp-file-name-user vec) 7447 (tramp-file-name-user vec)
7424 (tramp-file-name-host vec) 7448 (tramp-file-name-host vec)
7425 (tramp-file-name-method vec))) 7449 (tramp-file-name-method vec)))
7426 7450
7427 ;; Start new process. 7451 ;; Start new process.
7428 (when (and p (processp p)) 7452 (when (and p (processp p))
7429 (delete-process p)) 7453 (delete-process p))
7430 (setenv "TERM" tramp-terminal-type) 7454 (setenv "TERM" tramp-terminal-type)
7431 (setenv "LC_ALL" "C") 7455 (setenv "LC_ALL" "C")
7432 (setenv "PROMPT_COMMAND") 7456 (setenv "PROMPT_COMMAND")
7433 (setenv "PS1" tramp-initial-end-of-output) 7457 (setenv "PS1" tramp-initial-end-of-output)
7434 (let* ((target-alist (tramp-compute-multi-hops vec)) 7458 (let* ((target-alist (tramp-compute-multi-hops vec))
7435 (process-connection-type tramp-process-connection-type) 7459 (process-connection-type tramp-process-connection-type)
7436 (process-adaptive-read-buffering nil) 7460 (process-adaptive-read-buffering nil)
7437 (coding-system-for-read nil) 7461 (coding-system-for-read nil)
7438 ;; This must be done in order to avoid our file name handler. 7462 ;; This must be done in order to avoid our file name handler.
7439 (p (let ((default-directory 7463 (p (let ((default-directory
7440 (tramp-compat-temporary-file-directory))) 7464 (tramp-compat-temporary-file-directory)))
7441 (start-process 7465 (start-process
7442 (or (tramp-get-connection-property vec "process-name" nil) 7466 (or process-name (tramp-buffer-name vec))
7443 (tramp-buffer-name vec)) 7467 (tramp-get-connection-buffer vec)
7444 (tramp-get-connection-buffer vec) 7468 tramp-encoding-shell))))
7445 tramp-encoding-shell))))
7446 7469
7447 (tramp-message 7470 (tramp-message
7448 vec 6 "%s" (mapconcat 'identity (process-command p) " ")) 7471 vec 6 "%s" (mapconcat 'identity (process-command p) " "))
7449 7472
7450 ;; Check whether process is alive. 7473 ;; Check whether process is alive.
7451 (tramp-set-process-query-on-exit-flag p nil) 7474 (tramp-set-process-query-on-exit-flag p nil)
7452 (with-progress-reporter vec 3 "Waiting 60s for local shell to come up"
7453 (tramp-barf-if-no-shell-prompt 7475 (tramp-barf-if-no-shell-prompt
7454 p 60 "Couldn't find local shell prompt %s" tramp-encoding-shell)) 7476 p 60 "Couldn't find local shell prompt %s" tramp-encoding-shell)
7455 7477
7456 ;; Now do all the connections as specified. 7478 ;; Now do all the connections as specified.
7457 (while target-alist 7479 (while target-alist
7458 (let* ((hop (car target-alist)) 7480 (let* ((hop (car target-alist))
7459 (l-method (tramp-file-name-method hop)) 7481 (l-method (tramp-file-name-method hop))
7460 (l-user (tramp-file-name-user hop)) 7482 (l-user (tramp-file-name-user hop))
7461 (l-host (tramp-file-name-host hop)) 7483 (l-host (tramp-file-name-host hop))
7462 (l-port nil) 7484 (l-port nil)
7463 (login-program 7485 (login-program
7464 (tramp-get-method-parameter l-method 'tramp-login-program)) 7486 (tramp-get-method-parameter
7465 (login-args 7487 l-method 'tramp-login-program))
7466 (tramp-get-method-parameter l-method 'tramp-login-args)) 7488 (login-args
7467 (gw-args 7489 (tramp-get-method-parameter l-method 'tramp-login-args))
7468 (tramp-get-method-parameter l-method 'tramp-gw-args)) 7490 (async-args
7469 (gw (tramp-get-file-property hop "" "gateway" nil)) 7491 (tramp-get-method-parameter l-method 'tramp-async-args))
7470 (g-method (and gw (tramp-file-name-method gw))) 7492 (gw-args
7471 (g-user (and gw (tramp-file-name-user gw))) 7493 (tramp-get-method-parameter l-method 'tramp-gw-args))
7472 (g-host (and gw (tramp-file-name-host gw))) 7494 (gw (tramp-get-file-property hop "" "gateway" nil))
7473 (command login-program) 7495 (g-method (and gw (tramp-file-name-method gw)))
7474 ;; We don't create the temporary file. In fact, it 7496 (g-user (and gw (tramp-file-name-user gw)))
7475 ;; is just a prefix for the ControlPath option of 7497 (g-host (and gw (tramp-file-name-host gw)))
7476 ;; ssh; the real temporary file has another name, and 7498 (command login-program)
7477 ;; it is created and protected by ssh. It is also 7499 ;; We don't create the temporary file. In fact,
7478 ;; removed by ssh, when the connection is closed. 7500 ;; it is just a prefix for the ControlPath option
7479 (tmpfile 7501 ;; of ssh; the real temporary file has another
7480 (tramp-set-connection-property 7502 ;; name, and it is created and protected by ssh.
7481 p "temp-file" 7503 ;; It is also removed by ssh, when the connection
7482 (make-temp-name 7504 ;; is closed.
7483 (expand-file-name 7505 (tmpfile
7484 tramp-temp-name-prefix 7506 (tramp-set-connection-property
7485 (tramp-compat-temporary-file-directory))))) 7507 p "temp-file"
7486 spec) 7508 (make-temp-name
7487 7509 (expand-file-name
7488 ;; Add gateway arguments if necessary. 7510 tramp-temp-name-prefix
7489 (when (and gw gw-args) 7511 (tramp-compat-temporary-file-directory)))))
7490 (setq login-args (append login-args gw-args))) 7512 spec)
7491 7513
7492 ;; Check for port number. Until now, there's no need 7514 ;; Add arguments for asynchrononous processes.
7493 ;; for handling like method, user, host. 7515 (when (and process-name async-args)
7494 (when (string-match tramp-host-with-port-regexp l-host) 7516 (setq login-args (append login-args async-args)))
7517
7518 ;; Add gateway arguments if necessary.
7519 (when (and gw gw-args)
7520 (setq login-args (append login-args gw-args)))
7521
7522 ;; Check for port number. Until now, there's no need
7523 ;; for handling like method, user, host.
7524 (when (string-match tramp-host-with-port-regexp l-host)
7495 (setq l-port (match-string 2 l-host) 7525 (setq l-port (match-string 2 l-host)
7496 l-host (match-string 1 l-host))) 7526 l-host (match-string 1 l-host)))
7497 7527
7498 ;; Set variables for computing the prompt for reading 7528 ;; Set variables for computing the prompt for reading
7499 ;; password. They can also be derived from a gateway. 7529 ;; password. They can also be derived from a gateway.
7500 (setq tramp-current-method (or g-method l-method) 7530 (setq tramp-current-method (or g-method l-method)
7501 tramp-current-user (or g-user l-user) 7531 tramp-current-user (or g-user l-user)
7502 tramp-current-host (or g-host l-host)) 7532 tramp-current-host (or g-host l-host))
7503 7533
7504 ;; Replace login-args place holders. 7534 ;; Replace login-args place holders.
7505 (setq 7535 (setq
7506 l-host (or l-host "") 7536 l-host (or l-host "")
7507 l-user (or l-user "") 7537 l-user (or l-user "")
7508 l-port (or l-port "") 7538 l-port (or l-port "")
7509 spec (format-spec-make ?h l-host ?u l-user ?p l-port ?t tmpfile) 7539 spec (format-spec-make
7510 command 7540 ?h l-host ?u l-user ?p l-port ?t tmpfile)
7511 (concat 7541 command
7512 ;; We do not want to see the trailing local prompt in 7542 (concat
7513 ;; `start-file-process'. 7543 ;; We do not want to see the trailing local prompt in
7514 (unless (memq system-type '(windows-nt)) "exec ") 7544 ;; `start-file-process'.
7515 command " " 7545 (unless (memq system-type '(windows-nt)) "exec ")
7516 (mapconcat 7546 command " "
7517 (lambda (x) 7547 (mapconcat
7518 (setq x (mapcar (lambda (y) (format-spec y spec)) x)) 7548 (lambda (x)
7519 (unless (member "" x) (mapconcat 'identity x " "))) 7549 (setq x (mapcar (lambda (y) (format-spec y spec)) x))
7520 login-args " ") 7550 (unless (member "" x) (mapconcat 'identity x " ")))
7521 ;; Local shell could be a Windows COMSPEC. It doesn't 7551 login-args " ")
7522 ;; know the ";" syntax, but we must exit always for 7552 ;; Local shell could be a Windows COMSPEC. It
7523 ;; `start-file-process'. "exec" does not work either. 7553 ;; doesn't know the ";" syntax, but we must exit
7524 (if (memq system-type '(windows-nt)) " && exit || exit"))) 7554 ;; always for `start-file-process'. "exec" does not
7525 7555 ;; work either.
7526 ;; Send the command. 7556 (if (memq system-type '(windows-nt)) " && exit || exit")))
7527 (tramp-message vec 3 "Sending command `%s'" command) 7557
7528 (tramp-send-command vec command t t) 7558 ;; Send the command.
7529 (tramp-process-actions p vec tramp-actions-before-shell 60) 7559 (tramp-message vec 3 "Sending command `%s'" command)
7530 (tramp-message vec 3 "Found remote shell prompt on `%s'" l-host)) 7560 (tramp-send-command vec command t t)
7531 ;; Next hop. 7561 (tramp-process-actions p vec tramp-actions-before-shell 60)
7532 (setq target-alist (cdr target-alist))) 7562 (tramp-message
7533 7563 vec 3 "Found remote shell prompt on `%s'" l-host))
7534 ;; Make initial shell settings. 7564 ;; Next hop.
7535 (tramp-open-connection-setup-interactive-shell p vec)))))) 7565 (setq target-alist (cdr target-alist)))
7566
7567 ;; Make initial shell settings.
7568 (tramp-open-connection-setup-interactive-shell p vec)))))))
7536 7569
7537(defun tramp-send-command (vec command &optional neveropen nooutput) 7570(defun tramp-send-command (vec command &optional neveropen nooutput)
7538 "Send the COMMAND to connection VEC. 7571 "Send the COMMAND to connection VEC.
diff --git a/lisp/nxml/nxml-mode.el b/lisp/nxml/nxml-mode.el
index 5eb9840a4ca..101b2585186 100644
--- a/lisp/nxml/nxml-mode.el
+++ b/lisp/nxml/nxml-mode.el
@@ -404,6 +404,7 @@ reference.")
404 (define-key map "\M-}" 'nxml-forward-paragraph) 404 (define-key map "\M-}" 'nxml-forward-paragraph)
405 (define-key map "\M-h" 'nxml-mark-paragraph) 405 (define-key map "\M-h" 'nxml-mark-paragraph)
406 (define-key map "\C-c\C-f" 'nxml-finish-element) 406 (define-key map "\C-c\C-f" 'nxml-finish-element)
407 (define-key map "\C-c/" 'nxml-finish-element)
407 (define-key map "\C-c\C-m" 'nxml-split-element) 408 (define-key map "\C-c\C-m" 'nxml-split-element)
408 (define-key map "\C-c\C-b" 'nxml-balanced-close-start-tag-block) 409 (define-key map "\C-c\C-b" 'nxml-balanced-close-start-tag-block)
409 (define-key map "\C-c\C-i" 'nxml-balanced-close-start-tag-inline) 410 (define-key map "\C-c\C-i" 'nxml-balanced-close-start-tag-inline)
diff --git a/lisp/password-cache.el b/lisp/password-cache.el
index 126205a532f..7c07642a1f3 100644
--- a/lisp/password-cache.el
+++ b/lisp/password-cache.el
@@ -105,7 +105,7 @@ remove incorrect ones from the cache."
105 105
106(defun password-cache-remove (key) 106(defun password-cache-remove (key)
107 "Remove password indexed by KEY from password cache. 107 "Remove password indexed by KEY from password cache.
108This is typically run be a timer setup from `password-cache-add', 108This is typically run by a timer setup from `password-cache-add',
109but can be invoked at any time to forcefully remove passwords 109but can be invoked at any time to forcefully remove passwords
110from the cache. This may be useful when it has been detected 110from the cache. This may be useful when it has been detected
111that a password is invalid, so that `password-read' query the 111that a password is invalid, so that `password-read' query the
diff --git a/lisp/progmodes/cc-engine.el b/lisp/progmodes/cc-engine.el
index 2d28d003fd5..1ee3c295fe1 100644
--- a/lisp/progmodes/cc-engine.el
+++ b/lisp/progmodes/cc-engine.el
@@ -2245,50 +2245,50 @@ comment at the start of cc-engine.el for more info."
2245 (setq cnt (1- cnt))))) 2245 (setq cnt (1- cnt)))))
2246 (point))) 2246 (point)))
2247 2247
2248(defun c-state-balance-parens-backwards (here top) 2248(defun c-state-balance-parens-backwards (here- here+ top)
2249 ;; Return the position of the opening paren/brace/bracket before HERE which 2249 ;; Return the position of the opening paren/brace/bracket before HERE- which
2250 ;; matches the outermost close p/b/b between HERE and TOP, like this: 2250 ;; matches the outermost close p/b/b between HERE+ and TOP. Except when
2251 ;; 2251 ;; there's a macro, HERE- and HERE+ are the same. Like this:
2252 ;; ...................................... 2252 ;;
2253 ;; | | 2253 ;; ............................................
2254 ;; ( [ ( ........... ) ( ) ] ) 2254 ;; | |
2255 ;; ^ ^ ^ 2255 ;; ( [ ( .........#macro.. ) ( ) ] )
2256 ;; | | | 2256 ;; ^ ^ ^ ^
2257 ;; return HERE TOP 2257 ;; | | | |
2258 ;; return HERE- HERE+ TOP
2258 ;; 2259 ;;
2259 ;; If there aren't enough opening paren/brace/brackets, return the position 2260 ;; If there aren't enough opening paren/brace/brackets, return the position
2260 ;; of the outermost one found, or HERE it there are none. If there are no 2261 ;; of the outermost one found, or HERE- if there are none. If there are no
2261 ;; closeing p/b/bs between HERE and TOP, return HERE. HERE and TOP must not 2262 ;; closeing p/b/bs between HERE+ and TOP, return HERE-. HERE-/+ and TOP
2262 ;; be inside literals. Only the accessible portion of the buffer will be 2263 ;; must not be inside literals. Only the accessible portion of the buffer
2263 ;; scanned. 2264 ;; will be scanned.
2264 2265
2265 ;; PART 1: scan from `here' up to `top', accumulating ")"s which enclose 2266 ;; PART 1: scan from `here+' up to `top', accumulating ")"s which enclose
2266 ;; `here'. Go round the next loop each time we pass over such a ")". These 2267 ;; `here'. Go round the next loop each time we pass over such a ")". These
2267 ;; probably match "("s before `here'. 2268 ;; probably match "("s before `here-'.
2268 (let (pos pa ren+1 lonely-rens) 2269 (let (pos pa ren+1 lonely-rens)
2269 (save-excursion 2270 (save-excursion
2270 (save-restriction 2271 (save-restriction
2271 (narrow-to-region (point-min) top) ; This can move point, sometimes. 2272 (narrow-to-region (point-min) top) ; This can move point, sometimes.
2272 (setq pos here) 2273 (setq pos here+)
2273 (c-safe 2274 (c-safe
2274 (while 2275 (while
2275 (setq ren+1 (scan-lists pos 1 1)) ; might signal 2276 (setq ren+1 (scan-lists pos 1 1)) ; might signal
2276 (setq lonely-rens (cons ren+1 lonely-rens) 2277 (setq lonely-rens (cons ren+1 lonely-rens)
2277 pos ren+1))))) 2278 pos ren+1)))))
2278 2279
2279 ;; PART 2: Scan back before `here' searching for the "("s 2280 ;; PART 2: Scan back before `here-' searching for the "("s
2280 ;; matching/mismatching the ")"s found above. We only need to direct the 2281 ;; matching/mismatching the ")"s found above. We only need to direct the
2281 ;; caller to scan when we've encountered unmatched right parens. 2282 ;; caller to scan when we've encountered unmatched right parens.
2282 (when lonely-rens 2283 (setq pos here-)
2283 (setq pos here) 2284 (when lonely-rens
2284 (c-safe 2285 (c-safe
2285 (while 2286 (while
2286 (and lonely-rens ; actual values aren't used. 2287 (and lonely-rens ; actual values aren't used.
2287 (setq pa (scan-lists pos -1 1))) 2288 (setq pa (scan-lists pos -1 1)))
2288 (setq pos pa) 2289 (setq pos pa)
2289 (setq lonely-rens (cdr lonely-rens)))) ;) 2290 (setq lonely-rens (cdr lonely-rens)))))
2290 ) 2291 pos))
2291 pos))
2292 2292
2293(defun c-parse-state-get-strategy (here good-pos) 2293(defun c-parse-state-get-strategy (here good-pos)
2294 ;; Determine the scanning strategy for adjusting `c-parse-state', attempting 2294 ;; Determine the scanning strategy for adjusting `c-parse-state', attempting
@@ -2746,6 +2746,7 @@ comment at the start of cc-engine.el for more info."
2746 lit ; (START . END) of a literal containing some point. 2746 lit ; (START . END) of a literal containing some point.
2747 here-lit-start here-lit-end ; bounds of literal containing `here' 2747 here-lit-start here-lit-end ; bounds of literal containing `here'
2748 ; or `here' itself. 2748 ; or `here' itself.
2749 here- here+ ; start/end of macro around HERE, or HERE
2749 (here-bol (c-point 'bol here)) 2750 (here-bol (c-point 'bol here))
2750 (too-far-back (max (- here c-state-cache-too-far) 1))) 2751 (too-far-back (max (- here c-state-cache-too-far) 1)))
2751 2752
@@ -2758,57 +2759,73 @@ comment at the start of cc-engine.el for more info."
2758 ;; At this stage, (> pos here); 2759 ;; At this stage, (> pos here);
2759 ;; (< (c-state-cache-top-lparen) here) (or is nil). 2760 ;; (< (c-state-cache-top-lparen) here) (or is nil).
2760 2761
2761 ;; CASE 1: The top of the cache is a brace pair which now encloses `here'. 2762 (cond
2762 ;; As good-pos, return the address. of the "{". 2763 ((and (consp (car c-state-cache))
2763 (if (and (consp (car c-state-cache)) 2764 (> (cdar c-state-cache) here))
2764 (> (cdar c-state-cache) here)) 2765 ;; CASE 1: The top of the cache is a brace pair which now encloses
2765 ;; Since we've no knowledge of what's inside these braces, we have no 2766 ;; `here'. As good-pos, return the address. of the "{". Since we've no
2766 ;; alternative but to direct the caller to scan the buffer from the 2767 ;; knowledge of what's inside these braces, we have no alternative but
2767 ;; opening brace. 2768 ;; to direct the caller to scan the buffer from the opening brace.
2768 (progn 2769 (setq pos (caar c-state-cache))
2769 (setq pos (caar c-state-cache)) 2770 (setcar c-state-cache pos)
2770 (setcar c-state-cache pos) 2771 (list (1+ pos) pos t)) ; return value. We've just converted a brace pair
2771 (list (1+ pos) pos t)) ; return value. We've just converted a brace 2772 ; entry into a { entry, so the caller needs to
2772 ; pair entry into a { entry, so the caller 2773 ; search for a brace pair before the {.
2773 ; needs to search for a brace pair before the 2774
2774 ; {. 2775 ;; `here' might be inside a literal. Check for this.
2775 2776 ((progn
2776 ;; ;; `here' might be inside a literal. Check for this. 2777 (setq lit (c-state-literal-at here)
2777 (setq lit (c-state-literal-at here) 2778 here-lit-start (or (car lit) here)
2778 here-lit-start (or (car lit) here) 2779 here-lit-end (or (cdr lit) here))
2779 here-lit-end (or (cdr lit) here)) 2780 ;; Has `here' just "newly entered" a macro?
2780 2781 (save-excursion
2781 ;; `here' might be nested inside any depth of parens (or brackets but 2782 (goto-char here-lit-start)
2782 ;; not braces). Scan backwards to find the outermost such opening 2783 (if (and (c-beginning-of-macro)
2783 ;; paren, if there is one. This will be the scan position to return. 2784 (or (null c-state-old-cpp-beg)
2784 (save-restriction 2785 (not (= (point) c-state-old-cpp-beg))))
2785 (narrow-to-region cache-pos (point-max)) 2786 (progn
2786 (setq pos (c-state-balance-parens-backwards here-lit-end pos))) 2787 (setq here- (point))
2787 2788 (c-end-of-macro)
2788 (if (< pos here-lit-start) 2789 (setq here+ (point)))
2789 ;; CASE 2: Address of outermost ( or [ which now encloses `here', 2790 (setq here- here-lit-start
2790 ;; but didn't enclose the (previous) `c-state-cache-good-pos'. If 2791 here+ here-lit-end)))
2791 ;; there is a brace pair preceding this, it will already be in 2792
2792 ;; `c-state-cache', unless there was a brace pair after it, 2793 ;; `here' might be nested inside any depth of parens (or brackets but
2793 ;; i.e. there'll only be one to scan for if we've just deleted one. 2794 ;; not braces). Scan backwards to find the outermost such opening
2794 (list pos (and dropped-cons pos) t) ; Return value. 2795 ;; paren, if there is one. This will be the scan position to return.
2795 2796 (save-restriction
2796 ;; `here' isn't enclosed in a (previously unrecorded) bracket/paren. 2797 (narrow-to-region cache-pos (point-max))
2797 ;; Further forward scanning isn't needed, but we still need to find a 2798 (setq pos (c-state-balance-parens-backwards here- here+ pos)))
2798 ;; GOOD-POS. Step out of all enclosing "("s on HERE's line. 2799 nil)) ; for the cond
2800
2801 ((< pos here-lit-start)
2802 ;; CASE 2: Address of outermost ( or [ which now encloses `here', but
2803 ;; didn't enclose the (previous) `c-state-cache-good-pos'. If there is
2804 ;; a brace pair preceding this, it will already be in `c-state-cache',
2805 ;; unless there was a brace pair after it, i.e. there'll only be one to
2806 ;; scan for if we've just deleted one.
2807 (list pos (and dropped-cons pos) t)) ; Return value.
2808
2809 ;; `here' isn't enclosed in a (previously unrecorded) bracket/paren.
2810 ;; Further forward scanning isn't needed, but we still need to find a
2811 ;; GOOD-POS. Step out of all enclosing "("s on HERE's line.
2812 ((progn
2799 (save-restriction 2813 (save-restriction
2800 (narrow-to-region here-bol (point-max)) 2814 (narrow-to-region here-bol (point-max))
2801 (setq pos here-lit-start) 2815 (setq pos here-lit-start)
2802 (c-safe (while (setq pa (scan-lists pos -1 1)) 2816 (c-safe (while (setq pa (scan-lists pos -1 1))
2803 (setq pos pa)))) ; might signal 2817 (setq pos pa)))) ; might signal
2804 (if (setq ren (c-safe-scan-lists pos -1 -1 too-far-back)) 2818 nil)) ; for the cond
2805 ;; CASE 3: After a }/)/] before `here''s BOL. 2819
2806 (list (1+ ren) (and dropped-cons pos) nil) ; Return value 2820 ((setq ren (c-safe-scan-lists pos -1 -1 too-far-back))
2807 2821 ;; CASE 3: After a }/)/] before `here''s BOL.
2808 ;; CASE 4; Best of a bad job: BOL before `here-bol', or beginning of 2822 (list (1+ ren) (and dropped-cons pos) nil)) ; Return value
2809 ;; literal containing it. 2823
2810 (setq good-pos (c-state-lit-beg (c-point 'bopl here-bol))) 2824 (t
2811 (list good-pos (and dropped-cons good-pos) nil)))))) 2825 ;; CASE 4; Best of a bad job: BOL before `here-bol', or beginning of
2826 ;; literal containing it.
2827 (setq good-pos (c-state-lit-beg (c-point 'bopl here-bol)))
2828 (list good-pos (and dropped-cons good-pos) nil)))))
2812 2829
2813 2830
2814;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 2831;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
diff --git a/lisp/progmodes/f90.el b/lisp/progmodes/f90.el
index 0a3c96d7894..64c716208e9 100644
--- a/lisp/progmodes/f90.el
+++ b/lisp/progmodes/f90.el
@@ -1008,7 +1008,7 @@ Set subexpression 1 in the match-data to the name of the type."
1008 :regexp "\\(?:[^[:word:]_`]\\|^\\)\\(`?[[:word:]_]+\\)[^[:word:]_]*") 1008 :regexp "\\(?:[^[:word:]_`]\\|^\\)\\(`?[[:word:]_]+\\)[^[:word:]_]*")
1009 1009
1010;;;###autoload 1010;;;###autoload
1011(defun f90-mode () 1011(define-derived-mode f90-mode prog-mode "F90"
1012 "Major mode for editing Fortran 90,95 code in free format. 1012 "Major mode for editing Fortran 90,95 code in free format.
1013For fixed format code, use `fortran-mode'. 1013For fixed format code, use `fortran-mode'.
1014 1014
@@ -1065,13 +1065,9 @@ Variables controlling indentation style and extra features:
1065 1065
1066Turning on F90 mode calls the value of the variable `f90-mode-hook' 1066Turning on F90 mode calls the value of the variable `f90-mode-hook'
1067with no args, if that value is non-nil." 1067with no args, if that value is non-nil."
1068 (interactive) 1068 :group 'f90
1069 (kill-all-local-variables) 1069 :syntax-table f90-mode-syntax-table
1070 (setq major-mode 'f90-mode 1070 :abbrev-table f90-mode-abbrev-table
1071 mode-name "F90"
1072 local-abbrev-table f90-mode-abbrev-table)
1073 (set-syntax-table f90-mode-syntax-table)
1074 (use-local-map f90-mode-map)
1075 (set (make-local-variable 'indent-line-function) 'f90-indent-line) 1071 (set (make-local-variable 'indent-line-function) 'f90-indent-line)
1076 (set (make-local-variable 'indent-region-function) 'f90-indent-region) 1072 (set (make-local-variable 'indent-region-function) 'f90-indent-region)
1077 (set (make-local-variable 'require-final-newline) mode-require-final-newline) 1073 (set (make-local-variable 'require-final-newline) mode-require-final-newline)
@@ -1094,8 +1090,7 @@ with no args, if that value is non-nil."
1094 'f90-beginning-of-subprogram) 1090 'f90-beginning-of-subprogram)
1095 (set (make-local-variable 'end-of-defun-function) 'f90-end-of-subprogram) 1091 (set (make-local-variable 'end-of-defun-function) 'f90-end-of-subprogram)
1096 (set (make-local-variable 'add-log-current-defun-function) 1092 (set (make-local-variable 'add-log-current-defun-function)
1097 #'f90-current-defun) 1093 #'f90-current-defun))
1098 (run-mode-hooks 'f90-mode-hook))
1099 1094
1100 1095
1101;; Inline-functions. 1096;; Inline-functions.
diff --git a/lisp/progmodes/fortran.el b/lisp/progmodes/fortran.el
index 3784ba787c4..c37744bfe45 100644
--- a/lisp/progmodes/fortran.el
+++ b/lisp/progmodes/fortran.el
@@ -778,7 +778,7 @@ Used in the Fortran entry in `hs-special-modes-alist'.")
778 778
779 779
780;;;###autoload 780;;;###autoload
781(defun fortran-mode () 781(define-derived-mode fortran-mode prog-mode "Fortran"
782 "Major mode for editing Fortran code in fixed format. 782 "Major mode for editing Fortran code in fixed format.
783For free format code, use `f90-mode'. 783For free format code, use `f90-mode'.
784 784
@@ -848,13 +848,9 @@ Variables controlling indentation style and extra features:
848 848
849Turning on Fortran mode calls the value of the variable `fortran-mode-hook' 849Turning on Fortran mode calls the value of the variable `fortran-mode-hook'
850with no args, if that value is non-nil." 850with no args, if that value is non-nil."
851 (interactive) 851 :group 'fortran
852 (kill-all-local-variables) 852 :syntax-table fortran-mode-syntax-table
853 (setq major-mode 'fortran-mode 853 :abbrev-table fortran-mode-abbrev-table
854 mode-name "Fortran"
855 local-abbrev-table fortran-mode-abbrev-table)
856 (set-syntax-table fortran-mode-syntax-table)
857 (use-local-map fortran-mode-map)
858 (set (make-local-variable 'indent-line-function) 'fortran-indent-line) 854 (set (make-local-variable 'indent-line-function) 'fortran-indent-line)
859 (set (make-local-variable 'indent-region-function) 855 (set (make-local-variable 'indent-region-function)
860 (lambda (start end) 856 (lambda (start end)
@@ -906,8 +902,7 @@ with no args, if that value is non-nil."
906 #'fortran-current-defun) 902 #'fortran-current-defun)
907 (set (make-local-variable 'dabbrev-case-fold-search) 'case-fold-search) 903 (set (make-local-variable 'dabbrev-case-fold-search) 'case-fold-search)
908 (set (make-local-variable 'gud-find-expr-function) 'fortran-gud-find-expr) 904 (set (make-local-variable 'gud-find-expr-function) 'fortran-gud-find-expr)
909 (add-hook 'hack-local-variables-hook 'fortran-hack-local-variables nil t) 905 (add-hook 'hack-local-variables-hook 'fortran-hack-local-variables nil t))
910 (run-mode-hooks 'fortran-mode-hook))
911 906
912 907
913(defun fortran-line-length (nchars &optional global) 908(defun fortran-line-length (nchars &optional global)
diff --git a/lisp/progmodes/grep.el b/lisp/progmodes/grep.el
index de94620c737..3f5fa543813 100644
--- a/lisp/progmodes/grep.el
+++ b/lisp/progmodes/grep.el
@@ -781,12 +781,17 @@ substitution string. Note dynamic scoping of variables.")
781 (file-name-nondirectory bn))) 781 (file-name-nondirectory bn)))
782 (default-alias 782 (default-alias
783 (and fn 783 (and fn
784 (let ((aliases grep-files-aliases) 784 (let ((aliases (remove (assoc "all" grep-files-aliases)
785 grep-files-aliases))
785 alias) 786 alias)
786 (while aliases 787 (while aliases
787 (setq alias (car aliases) 788 (setq alias (car aliases)
788 aliases (cdr aliases)) 789 aliases (cdr aliases))
789 (if (string-match (wildcard-to-regexp (cdr alias)) fn) 790 (if (string-match (mapconcat
791 'wildcard-to-regexp
792 (split-string (cdr alias) nil t)
793 "\\|")
794 fn)
790 (setq aliases nil) 795 (setq aliases nil)
791 (setq alias nil))) 796 (setq alias nil)))
792 (cdr alias)))) 797 (cdr alias))))
diff --git a/lisp/progmodes/octave-mod.el b/lisp/progmodes/octave-mod.el
index eb84be601de..12f561c6814 100644
--- a/lisp/progmodes/octave-mod.el
+++ b/lisp/progmodes/octave-mod.el
@@ -214,6 +214,7 @@ parenthetical grouping.")
214 (define-key map "\C-c\M-\C-d" 'octave-down-block) 214 (define-key map "\C-c\M-\C-d" 'octave-down-block)
215 (define-key map "\C-c\M-\C-h" 'octave-mark-block) 215 (define-key map "\C-c\M-\C-h" 'octave-mark-block)
216 (define-key map "\C-c]" 'octave-close-block) 216 (define-key map "\C-c]" 'octave-close-block)
217 (define-key map "\C-c/" 'octave-close-block)
217 (define-key map "\C-c\C-f" 'octave-insert-defun) 218 (define-key map "\C-c\C-f" 'octave-insert-defun)
218 (define-key map "\C-c\C-h" 'octave-help) 219 (define-key map "\C-c\C-h" 'octave-help)
219 (define-key map "\C-c\C-il" 'octave-send-line) 220 (define-key map "\C-c\C-il" 'octave-send-line)
diff --git a/lisp/progmodes/subword.el b/lisp/progmodes/subword.el
index 4081791ae2e..7df42c8b9a2 100644
--- a/lisp/progmodes/subword.el
+++ b/lisp/progmodes/subword.el
@@ -76,7 +76,7 @@
76;; the old `c-forward-into-nomenclature' originally contributed by 76;; the old `c-forward-into-nomenclature' originally contributed by
77;; Terry_Glanfield dot Southern at rxuk dot xerox dot com. 77;; Terry_Glanfield dot Southern at rxuk dot xerox dot com.
78 78
79;; TODO: ispell-word and subword oriented C-w in isearch. 79;; TODO: ispell-word.
80 80
81;;; Code: 81;;; Code:
82 82
diff --git a/lisp/replace.el b/lisp/replace.el
index 487974073aa..d73692ccc20 100644
--- a/lisp/replace.el
+++ b/lisp/replace.el
@@ -1980,6 +1980,9 @@ make, or the user didn't cancel the call."
1980 (isearch-regexp regexp) 1980 (isearch-regexp regexp)
1981 (search-whitespace-regexp nil) 1981 (search-whitespace-regexp nil)
1982 (isearch-case-fold-search case-fold)) 1982 (isearch-case-fold-search case-fold))
1983 ;; Set isearch-word to nil because word-replace is regexp-based,
1984 ;; so `isearch-search-fun' should not use `word-search-forward'.
1985 (if (and isearch-word isearch-regexp) (setq isearch-word nil))
1983 (isearch-lazy-highlight-new-loop range-beg range-end)))) 1986 (isearch-lazy-highlight-new-loop range-beg range-end))))
1984 1987
1985(defun replace-dehighlight () 1988(defun replace-dehighlight ()
diff --git a/lisp/simple.el b/lisp/simple.el
index 48e1148ae6b..608151e5dd2 100644
--- a/lisp/simple.el
+++ b/lisp/simple.el
@@ -4539,6 +4539,9 @@ rests."
4539 (let ((goal-column 0) 4539 (let ((goal-column 0)
4540 (line-move-visual nil)) 4540 (line-move-visual nil))
4541 (and (line-move arg t) 4541 (and (line-move arg t)
4542 ;; With bidi reordering, we may not be at bol,
4543 ;; so make sure we are.
4544 (skip-chars-backward "^\n")
4542 (not (bobp)) 4545 (not (bobp))
4543 (progn 4546 (progn
4544 (while (and (not (bobp)) (invisible-p (1- (point)))) 4547 (while (and (not (bobp)) (invisible-p (1- (point))))
diff --git a/lisp/smerge-mode.el b/lisp/smerge-mode.el
index 732f7d19cf9..e9cba88ea1a 100644
--- a/lisp/smerge-mode.el
+++ b/lisp/smerge-mode.el
@@ -457,8 +457,8 @@ BUF contains a plain diff between match-1 and match-3."
457 457
458(defun smerge-resolve (&optional safe) 458(defun smerge-resolve (&optional safe)
459 "Resolve the conflict at point intelligently. 459 "Resolve the conflict at point intelligently.
460This relies on mode-specific knowledge and thus only works in 460This relies on mode-specific knowledge and thus only works in some
461some major modes. Uses `smerge-resolve-function' to do the actual work." 461major modes. Uses `smerge-resolve-function' to do the actual work."
462 (interactive) 462 (interactive)
463 (smerge-match-conflict) 463 (smerge-match-conflict)
464 (smerge-remove-props (match-beginning 0) (match-end 0)) 464 (smerge-remove-props (match-beginning 0) (match-end 0))
@@ -815,12 +815,12 @@ Its behavior has mainly two restrictions:
815 This only matters if `smerge-refine-weight-hack' is nil.") 815 This only matters if `smerge-refine-weight-hack' is nil.")
816 816
817(defvar smerge-refine-ignore-whitespace t 817(defvar smerge-refine-ignore-whitespace t
818 "If non-nil,Indicate that smerge-refine should try to ignore change in whitespace.") 818 "If non-nil, indicate that `smerge-refine' should try to ignore change in whitespace.")
819 819
820(defvar smerge-refine-weight-hack t 820(defvar smerge-refine-weight-hack t
821 "If non-nil, pass to diff as many lines as there are chars in the region. 821 "If non-nil, pass to diff as many lines as there are chars in the region.
822I.e. each atomic element (e.g. word) will be copied as many times (on different 822I.e. each atomic element (e.g. word) will be copied as many times (on different
823lines) as it has chars. This has 2 advantages: 823lines) as it has chars. This has two advantages:
824- if `diff' tries to minimize the number *lines* (rather than chars) 824- if `diff' tries to minimize the number *lines* (rather than chars)
825 added/removed, this adjust the weights so that adding/removing long 825 added/removed, this adjust the weights so that adding/removing long
826 symbols is considered correspondingly more costly. 826 symbols is considered correspondingly more costly.
@@ -919,8 +919,8 @@ chars to try and eliminate some spurious differences."
919 "Show fine differences in the two regions BEG1..END1 and BEG2..END2. 919 "Show fine differences in the two regions BEG1..END1 and BEG2..END2.
920PROPS is an alist of properties to put (via overlays) on the changes. 920PROPS is an alist of properties to put (via overlays) on the changes.
921If non-nil, PREPROC is called with no argument in a buffer that contains 921If non-nil, PREPROC is called with no argument in a buffer that contains
922a copy of a region, just before preparing it to for `diff'. It can be used to 922a copy of a region, just before preparing it to for `diff'. It can be
923replace chars to try and eliminate some spurious differences." 923used to replace chars to try and eliminate some spurious differences."
924 (let* ((buf (current-buffer)) 924 (let* ((buf (current-buffer))
925 (pos (point)) 925 (pos (point))
926 (file1 (make-temp-file "diff1")) 926 (file1 (make-temp-file "diff1"))
@@ -988,9 +988,9 @@ replace chars to try and eliminate some spurious differences."
988 988
989(defun smerge-refine (&optional part) 989(defun smerge-refine (&optional part)
990 "Highlight the words of the conflict that are different. 990 "Highlight the words of the conflict that are different.
991For 3-way conflicts, highlights only 2 of the 3 parts. 991For 3-way conflicts, highlights only two of the three parts.
992A numeric argument PART can be used to specify which 2 parts; 992A numeric argument PART can be used to specify which two parts;
993repeating the command will highlight other 2 parts." 993repeating the command will highlight other two parts."
994 (interactive 994 (interactive
995 (if (integerp current-prefix-arg) (list current-prefix-arg) 995 (if (integerp current-prefix-arg) (list current-prefix-arg)
996 (smerge-match-conflict) 996 (smerge-match-conflict)
@@ -1161,7 +1161,7 @@ buffer names."
1161 1161
1162(defun smerge-makeup-conflict (pt1 pt2 pt3 &optional pt4) 1162(defun smerge-makeup-conflict (pt1 pt2 pt3 &optional pt4)
1163 "Insert diff3 markers to make a new conflict. 1163 "Insert diff3 markers to make a new conflict.
1164Uses point and mark for 2 of the relevant positions and previous marks 1164Uses point and mark for two of the relevant positions and previous marks
1165for the other ones. 1165for the other ones.
1166By default, makes up a 2-way conflict, 1166By default, makes up a 2-way conflict,
1167with a \\[universal-argument] prefix, makes up a 3-way conflict." 1167with a \\[universal-argument] prefix, makes up a 3-way conflict."
@@ -1184,7 +1184,7 @@ with a \\[universal-argument] prefix, makes up a 3-way conflict."
1184 (insert "<<<<<<< MINE\n")) 1184 (insert "<<<<<<< MINE\n"))
1185 (if smerge-mode nil (smerge-mode 1)) 1185 (if smerge-mode nil (smerge-mode 1))
1186 (smerge-refine)) 1186 (smerge-refine))
1187 1187
1188 1188
1189(defconst smerge-parsep-re 1189(defconst smerge-parsep-re
1190 (concat smerge-begin-re "\\|" smerge-end-re "\\|" 1190 (concat smerge-begin-re "\\|" smerge-end-re "\\|"
diff --git a/lisp/vc-dir.el b/lisp/vc-dir.el
index f24e627de64..5809110e5b5 100644
--- a/lisp/vc-dir.el
+++ b/lisp/vc-dir.el
@@ -1169,7 +1169,8 @@ These are the commands available for use in the file status buffer:
1169 nil t nil nil))))) 1169 nil t nil nil)))))
1170 (unless backend 1170 (unless backend
1171 (setq backend (vc-responsible-backend dir))) 1171 (setq backend (vc-responsible-backend dir)))
1172 (pop-to-buffer (vc-dir-prepare-status-buffer "*vc-dir*" dir backend)) 1172 (let (pop-up-windows) ; based on cvs-examine; bug#6204
1173 (pop-to-buffer (vc-dir-prepare-status-buffer "*vc-dir*" dir backend)))
1173 (if (derived-mode-p 'vc-dir-mode) 1174 (if (derived-mode-p 'vc-dir-mode)
1174 (vc-dir-refresh) 1175 (vc-dir-refresh)
1175 ;; FIXME: find a better way to pass the backend to `vc-dir-mode'. 1176 ;; FIXME: find a better way to pass the backend to `vc-dir-mode'.