Mercurial > emacs
changeset 84966:fa9dd0b54e54
* net/tramp.el (with-file-property, with-connection-property):
Highlight as keyword.
(tramp-rfn-eshadow-setup-minibuffer)
(tramp-rfn-eshadow-update-overlay, tramp-handle-set-file-times)
(tramp-set-file-uid-gid, tramp-do-copy-or-rename-file-via-buffer)
(tramp-do-copy-or-rename-file-directly)
(tramp-do-copy-or-rename-file-out-of-band)
(tramp-handle-shell-command, tramp-get-debug-buffer)
(tramp-send-command-and-read, tramp-equal-remote)
(tramp-get-local-gid): Pacify byte-compiler.
(tramp-handle-file-name-directory): Result shall not be expanded.
(tramp-find-foreign-file-name-handler): Rewrite.
(tramp-dissect-file-name): Add optional parameter NODEFAULT.
* net/tramp-cache.el (tramp-cache-print): Pacify byte-compiler.
* net/tramp-fish.el (tramp-fish-handle-expand-file-name): Apply
`tramp-completion-mode-p'.
(tramp-fish-handle-set-file-times)
(tramp-fish-handle-executable-find)
(tramp-fish-handle-process-file, tramp-fish-get-file-entries)
(tramp-fish-retrieve-data): Pacify byte-compiler.
* net/tramp-gw.el (tramp-gw-basic-authentication): Call
`tramp-read-passwd' with first parameter `nil'.
author | Michael Albinus <michael.albinus@gmx.de> |
---|---|
date | Fri, 28 Sep 2007 16:05:49 +0000 |
parents | a92aa9f0c3e7 |
children | 90cae4d53a9c |
files | lisp/ChangeLog lisp/net/tramp-cache.el lisp/net/tramp-fish.el lisp/net/tramp-gw.el lisp/net/tramp.el |
diffstat | 5 files changed, 168 insertions(+), 112 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/ChangeLog Fri Sep 28 07:10:50 2007 +0000 +++ b/lisp/ChangeLog Fri Sep 28 16:05:49 2007 +0000 @@ -1,3 +1,31 @@ +2007-09-28 Michael Albinus <michael.albinus@gmx.de> + + * net/tramp.el (with-file-property, with-connection-property): + Highlight as keyword. + (tramp-rfn-eshadow-setup-minibuffer) + (tramp-rfn-eshadow-update-overlay, tramp-handle-set-file-times) + (tramp-set-file-uid-gid, tramp-do-copy-or-rename-file-via-buffer) + (tramp-do-copy-or-rename-file-directly) + (tramp-do-copy-or-rename-file-out-of-band) + (tramp-handle-shell-command, tramp-get-debug-buffer) + (tramp-send-command-and-read, tramp-equal-remote) + (tramp-get-local-gid): Pacify byte-compiler. + (tramp-handle-file-name-directory): Result shall not be expanded. + (tramp-find-foreign-file-name-handler): Rewrite. + (tramp-dissect-file-name): Add optional parameter NODEFAULT. + + * net/tramp-cache.el (tramp-cache-print): Pacify byte-compiler. + + * net/tramp-fish.el (tramp-fish-handle-expand-file-name): Apply + `tramp-completion-mode-p'. + (tramp-fish-handle-set-file-times) + (tramp-fish-handle-executable-find) + (tramp-fish-handle-process-file, tramp-fish-get-file-entries) + (tramp-fish-retrieve-data): Pacify byte-compiler. + + * net/tramp-gw.el (tramp-gw-basic-authentication): Call + `tramp-read-passwd' with first parameter `nil'. + 2007-09-28 Glenn Morris <rgm@gnu.org> * mail/supercite.el (sc-attribs-filter-namelist): Use mapc rather
--- a/lisp/net/tramp-cache.el Fri Sep 28 07:10:50 2007 +0000 +++ b/lisp/net/tramp-cache.el Fri Sep 28 16:05:49 2007 +0000 @@ -141,20 +141,20 @@ (defun tramp-cache-print (table) "Prints hash table TABLE." (when (hash-table-p table) - (let (result tmp) + (let (result) (maphash '(lambda (key value) - (setq tmp (format - "(%s %s)" - (if (processp key) - (prin1-to-string (prin1-to-string key)) - (prin1-to-string key)) - (if (hash-table-p value) - (tramp-cache-print value) - (if (bufferp value) - (prin1-to-string (prin1-to-string value)) - (prin1-to-string value)))) - result (if result (concat result " " tmp) tmp))) + (let ((tmp (format + "(%s %s)" + (if (processp key) + (prin1-to-string (prin1-to-string key)) + (prin1-to-string key)) + (if (hash-table-p value) + (tramp-cache-print value) + (if (bufferp value) + (prin1-to-string (prin1-to-string value)) + (prin1-to-string value)))))) + (setq result (if result (concat result " " tmp) tmp)))) table) result)))
--- a/lisp/net/tramp-fish.el Fri Sep 28 07:10:50 2007 +0000 +++ b/lisp/net/tramp-fish.el Fri Sep 28 16:05:49 2007 +0000 @@ -365,7 +365,7 @@ (unless (file-name-absolute-p name) (setq name (concat (file-name-as-directory dir) name))) ;; If NAME is not a tramp file, run the real handler - (if (or (tramp-completion-mode) (not (tramp-tramp-file-p name))) + (if (or (tramp-completion-mode-p) (not (tramp-tramp-file-p name))) (tramp-drop-volume-letter (tramp-run-real-handler 'expand-file-name (list name nil))) ;; Dissect NAME. @@ -701,10 +701,11 @@ "Like `set-file-times' for Tramp files." (with-parsed-tramp-file-name filename nil (let ((time (if (or (null time) (equal time '(0 0))) (current-time) time))) - (zerop (process-file - "touch" nil nil nil "-t" - (format-time-string "%Y%m%d%H%M.%S" time) - (tramp-shell-quote-argument localname)))))) + (zerop (apply + 'process-file + (list "touch" nil nil nil "-t" + (format-time-string "%Y%m%d%H%M.%S" time) + (tramp-shell-quote-argument localname))))))) (defun tramp-fish-handle-write-region (start end filename &optional append visit lockname confirm) @@ -739,7 +740,7 @@ (defun tramp-fish-handle-executable-find (command) "Like `executable-find' for Tramp files." (with-temp-buffer - (if (zerop (process-file "which" nil t nil command)) + (if (zerop (apply 'process-file (list "which" nil t nil command))) (progn (goto-char (point-min)) (buffer-substring (point-min) (tramp-line-end-position)))))) @@ -823,7 +824,7 @@ v (format "#EXEC %s %s" (tramp-shell-quote-argument command) output)) - (error)) + (error nil)) ;; Check return code. (setq tmpfil (file-local-copy (tramp-make-tramp-file-name method user host output))) @@ -961,7 +962,7 @@ ;; Read number of entries (goto-char (point-min)) (condition-case nil - (unless (integerp (setq num (read (current-buffer)))) (error)) + (unless (integerp (setq num (read (current-buffer)))) (error nil)) (error (return nil))) (forward-line) (delete-region (point-min) (point)) @@ -969,7 +970,7 @@ ;; Read return code (goto-char (point-min)) (condition-case nil - (unless (looking-at tramp-fish-continue-prompt-regexp) (error)) + (unless (looking-at tramp-fish-continue-prompt-regexp) (error nil)) (error (return nil))) (forward-line) (delete-region (point-min) (point)) @@ -986,7 +987,7 @@ ;; Read return code (goto-char (point-min)) (condition-case nil - (unless (looking-at tramp-fish-ok-prompt-regexp) (error)) + (unless (looking-at tramp-fish-ok-prompt-regexp) (error nil)) (error (tramp-error vec 'file-error "`%s' does not return a valid Lisp expression: `%s'" @@ -1071,7 +1072,7 @@ ;; Read filesize (goto-char (point-min)) (condition-case nil - (unless (integerp (setq size (read (current-buffer)))) (error)) + (unless (integerp (setq size (read (current-buffer)))) (error nil)) (error (return nil))) (forward-line) (delete-region (point-min) (point)) @@ -1079,7 +1080,7 @@ ;; Read return code (goto-char (point-min)) (condition-case nil - (unless (looking-at tramp-fish-continue-prompt-regexp) (error)) + (unless (looking-at tramp-fish-continue-prompt-regexp) (error nil)) (error (return nil))) (forward-line) (delete-region (point-min) (point)) @@ -1095,7 +1096,7 @@ ;; Read return code (goto-char (+ (point-min) size)) (condition-case nil - (unless (looking-at tramp-fish-ok-prompt-regexp) (error)) + (unless (looking-at tramp-fish-ok-prompt-regexp) (error nil)) (error (return nil))) (delete-region (+ (point-min) size) (point-max)) size))))
--- a/lisp/net/tramp-gw.el Fri Sep 28 07:10:50 2007 +0000 +++ b/lisp/net/tramp-gw.el Fri Sep 28 16:05:49 2007 +0000 @@ -307,7 +307,7 @@ "%s:%s" socks-username (tramp-read-passwd - proc + nil (format "Password for %s@[%s]: " socks-username (read (current-buffer)))))))))
--- a/lisp/net/tramp.el Fri Sep 28 07:10:50 2007 +0000 +++ b/lisp/net/tramp.el Fri Sep 28 16:05:49 2007 +0000 @@ -1726,27 +1726,27 @@ Escape sequence %s is replaced with name of Perl binary. This string is passed to `format', so percent characters need to be doubled.") -(defconst tramp-file-mode-type-map '((0 . "-") ; Normal file (SVID-v2 and XPG2) - (1 . "p") ; fifo - (2 . "c") ; character device - (3 . "m") ; multiplexed character device (v7) - (4 . "d") ; directory - (5 . "?") ; Named special file (XENIX) - (6 . "b") ; block device - (7 . "?") ; multiplexed block device (v7) - (8 . "-") ; regular file - (9 . "n") ; network special file (HP-UX) - (10 . "l") ; symlink - (11 . "?") ; ACL shadow inode (Solaris, not userspace) - (12 . "s") ; socket - (13 . "D") ; door special (Solaris) - (14 . "w")) ; whiteout (BSD) +(defconst tramp-file-mode-type-map + '((0 . "-") ; Normal file (SVID-v2 and XPG2) + (1 . "p") ; fifo + (2 . "c") ; character device + (3 . "m") ; multiplexed character device (v7) + (4 . "d") ; directory + (5 . "?") ; Named special file (XENIX) + (6 . "b") ; block device + (7 . "?") ; multiplexed block device (v7) + (8 . "-") ; regular file + (9 . "n") ; network special file (HP-UX) + (10 . "l") ; symlink + (11 . "?") ; ACL shadow inode (Solaris, not userspace) + (12 . "s") ; socket + (13 . "D") ; door special (Solaris) + (14 . "w")) ; whiteout (BSD) "A list of file types returned from the `stat' system call. This is used to map a mode number to a permission string.") ;; New handlers should be added here. The following operations can be ;; handled using the normal primitives: file-name-as-directory, -;; file-name-directory, file-name-nondirectory, ;; file-name-sans-versions, get-file-buffer. (defconst tramp-file-name-handler-alist '((load . tramp-handle-load) @@ -1970,14 +1970,9 @@ (put 'with-parsed-tramp-file-name 'lisp-indent-function 2) (put 'with-parsed-tramp-file-name 'edebug-form-spec '(form symbolp body)) -;; Enable debugging. -;(eval-and-compile -; (when (featurep 'edebug) -; (def-edebug-spec with-parsed-tramp-file-name (form symbolp body)))) -;; Highlight as keyword. (when (functionp 'font-lock-add-keywords) - (funcall 'font-lock-add-keywords - 'emacs-lisp-mode '("\\<with-parsed-tramp-file-name\\>"))) + (apply 'font-lock-add-keywords + (list 'emacs-lisp-mode '("\\<with-parsed-tramp-file-name\\>")))) (defmacro with-file-property (vec file property &rest body) "Check in Tramp cache for PROPERTY, otherwise execute BODY and set cache. @@ -1992,8 +1987,12 @@ (tramp-set-file-property ,vec ,file ,property value)) value) ,@body)) + (put 'with-file-property 'lisp-indent-function 3) (put 'with-file-property 'edebug-form-spec t) +(when (functionp 'font-lock-add-keywords) + (apply 'font-lock-add-keywords + (list 'emacs-lisp-mode '("\\<with-file-property\\>")))) (defmacro with-connection-property (key property &rest body) "Checks in Tramp for property PROPERTY, otherwise executes BODY and set." @@ -2005,8 +2004,12 @@ (setq value (progn ,@body)) (tramp-set-connection-property ,key ,property value)) value)) + (put 'with-connection-property 'lisp-indent-function 2) (put 'with-connection-property 'edebug-form-spec t) +(when (functionp 'font-lock-add-keywords) + (apply 'font-lock-add-keywords + (list 'emacs-lisp-mode '("\\<with-connection-property\\>")))) (defmacro tramp-let-maybe (variable value &rest body) "Let-bind VARIABLE to VALUE in BODY, but only if VARIABLE is not obsolete. @@ -2098,13 +2101,18 @@ "Set up a minibuffer for `file-name-shadow-mode'. Adds another overlay hiding filename parts according to Tramp's special handling of `substitute-in-file-name'." - (when minibuffer-completing-file-name + (when (symbol-value 'minibuffer-completing-file-name) (setq tramp-rfn-eshadow-overlay - (make-overlay (minibuffer-prompt-end) (minibuffer-prompt-end))) + (apply + 'make-overlay + (list (apply (symbol-function 'minibuffer-prompt-end)) + (apply (symbol-function 'minibuffer-prompt-end))))) ;; Copy rfn-eshadow-overlay properties. - (let ((props (overlay-properties rfn-eshadow-overlay))) + (let ((props (apply 'overlay-properties + (list (symbol-value 'rfn-eshadow-overlay))))) (while props - (overlay-put tramp-rfn-eshadow-overlay (pop props) (pop props)))))) + (apply 'overlay-put + (list tramp-rfn-eshadow-overlay (pop props) (pop props))))))) (when (boundp 'rfn-eshadow-setup-minibuffer-hook) (add-hook 'rfn-eshadow-setup-minibuffer-hook @@ -2116,13 +2124,15 @@ `file-name-shadow-mode'; the minibuffer should have already been set up by `rfn-eshadow-setup-minibuffer'." ;; In remote files name, there is a shadowing just for the local part. - (let ((end (or (overlay-end rfn-eshadow-overlay) (minibuffer-prompt-end)))) - (when (file-remote-p (buffer-substring-no-properties end (point-max))) + (let ((end (or (apply 'overlay-end (list (symbol-value 'rfn-eshadow-overlay))) + (apply (symbol-function 'minibuffer-prompt-end))))) + (when (apply 'file-remote-p + (list (buffer-substring-no-properties end (point-max)))) (narrow-to-region (1+ (or (string-match "/" (buffer-string) end) end)) (point-max)) (let ((rfn-eshadow-overlay tramp-rfn-eshadow-overlay) (rfn-eshadow-update-overlay-hook nil)) - (rfn-eshadow-update-overlay)) + (apply (symbol-function 'rfn-eshadow-update-overlay))) (widen)))) (when (boundp 'rfn-eshadow-update-overlay-hook) @@ -2210,11 +2220,17 @@ ;; Localname manipulation functions that grok TRAMP localnames... (defun tramp-handle-file-name-directory (file) "Like `file-name-directory' but aware of Tramp files." - ;; Everything except the last filename thing is the directory. - (with-parsed-tramp-file-name file nil + ;; Everything except the last filename thing is the directory. We + ;; cannot apply `with-parsed-tramp-file-name', because this expands + ;; the remote file name parts. This is a problem when we are in + ;; file name completion. + (let ((v (tramp-dissect-file-name file t))) ;; Run the command on the localname portion only. (tramp-make-tramp-file-name - method user host (file-name-directory (or localname ""))))) + (tramp-file-name-method v) + (tramp-file-name-user v) + (tramp-file-name-host v) + (file-name-directory (or (tramp-file-name-localname v) ""))))) (defun tramp-handle-file-name-nondirectory (file) "Like `file-name-nondirectory' but aware of Tramp files." @@ -2558,7 +2574,7 @@ (defun tramp-handle-set-file-times (filename &optional time) "Like `set-file-times' for Tramp files." (zerop - (if (file-remote-p filename) + (if (apply 'file-remote-p (list filename)) (with-parsed-tramp-file-name filename nil (tramp-flush-file-property v localname) (let ((time (if (or (null time) (equal time '(0 0))) @@ -2599,7 +2615,7 @@ ;; another implementation, see `dired-do-chown'. OTOH, it is ;; mostly working with su(do)? when it is needed, so it shall ;; succeed in the majority of cases. - (if (file-remote-p filename) + (if (apply 'file-remote-p (list filename)) (with-parsed-tramp-file-name filename nil (let ((uid (or (and (integerp uid) uid) (tramp-get-remote-uid v 'integer))) @@ -3066,8 +3082,7 @@ (jka-compr-inhibit t)) (write-region (point-min) (point-max) newname)))) ;; KEEP-DATE handling. - (when (and keep-date (functionp 'set-file-times)) - (apply 'set-file-times (list newname modtime))) + (when keep-date (apply 'set-file-times (list newname modtime))) ;; Set the mode. (set-file-modes newname (file-modes filename)) ;; If the operation was `rename', delete the original file. @@ -3098,7 +3113,7 @@ (if t1 (tramp-handle-file-remote-p filename 'localname) filename)) (localname2 (if t2 (tramp-handle-file-remote-p newname 'localname) newname)) - (prefix (tramp-handle-file-remote-p (if t1 filename newname))) + (prefix (apply 'file-remote-p (list (if t1 filename newname)))) (tmpfile (tramp-make-temp-file localname1))) (cond @@ -3130,9 +3145,10 @@ ((and (file-readable-p localname1) (file-writable-p (file-name-directory localname2))) (if (eq op 'copy) - (copy-file - localname1 localname2 ok-if-already-exists - keep-date preserve-uid-gid) + (apply + 'copy-file + (list localname1 localname2 ok-if-already-exists + keep-date preserve-uid-gid)) (rename-file localname1 localname2 ok-if-already-exists))) ;; We can do it directly with `tramp-send-command' @@ -3165,9 +3181,10 @@ (tramp-get-local-gid 'integer))) (t2 (if (eq op 'copy) - (copy-file - localname1 tmpfile ok-if-already-exists - keep-date preserve-uid-gid) + (apply + 'copy-file + (list localname1 tmpfile ok-if-already-exists + keep-date preserve-uid-gid)) (rename-file localname1 tmpfile ok-if-already-exists)) ;; We must change the ownership as local user. (tramp-set-file-uid-gid @@ -3185,9 +3202,10 @@ (tramp-shell-quote-argument localname2)))) (t1 (if (eq op 'copy) - (copy-file - tmpfile localname2 ok-if-already-exists - keep-date preserve-uid-gid) + (apply + 'copy-file + (list tmpfile localname2 ok-if-already-exists + keep-date preserve-uid-gid)) (rename-file tmpfile localname2 ok-if-already-exists)))) ;; Remove temporary file. @@ -3197,7 +3215,8 @@ ;; Won't be applied for 'rename. (condition-case nil (when (and keep-date (not preserve-uid-gid)) - (set-file-times newname (nth 5 (file-attributes filename))) + (apply 'set-file-times + (list newname (nth 5 (file-attributes filename)))) (set-file-modes newname (file-modes filename))) (error))))) @@ -3295,7 +3314,7 @@ (tramp-message v 0 "Transferring %s to %s...done" filename newname) ;; Handle KEEP-DATE argument. - (when (and keep-date (not copy-keep-date) (functionp 'set-file-times)) + (when (and keep-date (not copy-keep-date)) (apply 'set-file-times (list newname (nth 5 (file-attributes filename))))) @@ -3818,7 +3837,9 @@ (delete-file (buffer-file-name (cadr buffer)))) ;; There's some output, display it. (when (with-current-buffer output-buffer (> (point-max) (point-min))) - (display-message-or-buffer output-buffer))))) + (if (functionp 'display-message-or-buffer) + (apply 'display-message-or-buffer (list output-buffer)) + (pop-to-buffer output-buffer)))))) ;; File Editing. @@ -4344,20 +4365,21 @@ (defun tramp-find-foreign-file-name-handler (filename) "Return foreign file name handler if exists." - (when (and (stringp filename) (tramp-tramp-file-p filename) - (or (not (tramp-completion-mode-p)) - (not (string-match - tramp-completion-file-name-regexp filename)))) - (let (elt - res - (handler-alist tramp-foreign-file-name-handler-alist)) - (while handler-alist - (setq elt (car handler-alist) - handler-alist (cdr handler-alist)) - (when (funcall (car elt) filename) - (setq handler-alist nil) - (setq res (cdr elt)))) - res))) + (when (and (stringp filename) (tramp-tramp-file-p filename)) + (let ((v (tramp-dissect-file-name filename t)) + (handler tramp-foreign-file-name-handler-alist) + elt res) + ;; When we are not fully sure that filename completion is safe, + ;; we should not return a handler. + (when (or (tramp-file-name-method v) (tramp-file-name-user v) + (not (tramp-completion-mode-p))) + (while handler + (setq elt (car handler) + handler (cdr handler)) + (when (funcall (car elt) filename) + (setq handler nil + res (cdr elt)))) + res)))) ;; Main function. ;;;###autoload @@ -5199,17 +5221,17 @@ (get-buffer-create (tramp-debug-buffer-name vec)) (when (bobp) (setq buffer-undo-list t) - ;; Activate outline-mode - (make-local-variable 'outline-regexp) - (make-local-variable 'outline-level) - ;; This runs `text-mode-hook' and `outline-mode-hook'. We must - ;; prevent that local processes die. Yes: I've seen - ;; `flyspell-mode', which starts "ispell" ... + ;; Activate outline-mode. This runs `text-mode-hook' and + ;; `outline-mode-hook'. We must prevent that local processes + ;; die. Yes: I've seen `flyspell-mode', which starts "ispell" + ;; ... (let ((default-directory (tramp-temporary-file-directory))) (outline-mode)) - (setq outline-regexp "[0-9]+:[0-9]+:[0-9]+ [a-z0-9-]+ (\\([0-9]+\\)) #") -; (setq outline-regexp "[a-z.-]+:[0-9]+: [a-z0-9-]+ (\\([0-9]+\\)) #") - (setq outline-level 'tramp-outline-level)) + (set (make-local-variable 'outline-regexp) + "[0-9]+:[0-9]+:[0-9]+ [a-z0-9-]+ (\\([0-9]+\\)) #") +; (set (make-local-variable 'outline-regexp) +; "[a-z.-]+:[0-9]+: [a-z0-9-]+ (\\([0-9]+\\)) #") + (set (make-local-variable 'outline-level) 'tramp-outline-level)) (current-buffer))) (defun tramp-outline-level () @@ -6275,7 +6297,7 @@ (prog1 (read (current-buffer)) ;; Error handling. (when (re-search-forward "\\S-" (tramp-line-end-position) t) - (error))) + (error nil))) (error (tramp-error vec 'file-error "`%s' does not return a valid Lisp expression: `%s'" @@ -6618,10 +6640,12 @@ (or (and (> (length host) 0) host) tramp-default-host)) -(defun tramp-dissect-file-name (name) +(defun tramp-dissect-file-name (name &optional nodefault) "Return a `tramp-file-name' structure. -The structure consists of remote method, remote user, remote host and -localname (file name on remote host)." +The structure consists of remote method, remote user, remote host +and localname (file name on remote host). If NODEFAULT is +non-nil, the file name parts are not expanded to their default +values." (save-match-data (let ((match (string-match (nth 0 tramp-file-name-structure) name))) (unless match (error "Not a tramp file name: %s" name)) @@ -6629,11 +6653,13 @@ (user (match-string (nth 2 tramp-file-name-structure) name)) (host (match-string (nth 3 tramp-file-name-structure) name)) (localname (match-string (nth 4 tramp-file-name-structure) name))) - (vector - (tramp-find-method method user host) - (tramp-find-user method user host) - (tramp-find-host method user host) - localname))))) + (if nodefault + (vector method user host localname) + (vector + (tramp-find-method method user host) + (tramp-find-user method user host) + (tramp-find-host method user host) + localname)))))) (defun tramp-equal-remote (file1 file2) "Checks, whether the remote parts of FILE1 and FILE2 are identical. @@ -6649,9 +6675,10 @@ would yield `t'. On the other hand, the following check results in nil: (tramp-equal-remote \"/sudo::/etc\" \"/su::/etc\")" - (and (stringp (file-remote-p file1)) - (stringp (file-remote-p file2)) - (string-equal (file-remote-p file1) (file-remote-p file2)))) + (and (stringp (apply 'file-remote-p (list file1))) + (stringp (apply 'file-remote-p (list file2))) + (string-equal (apply 'file-remote-p (list file1)) + (apply 'file-remote-p (list file2))))) (defun tramp-make-tramp-file-name (method user host localname) "Constructs a Tramp file name from METHOD, USER, HOST and LOCALNAME." @@ -6879,7 +6906,7 @@ (if (equal id-format 'integer) (user-uid) (user-login-name))) (defun tramp-get-local-gid (id-format) - (nth 3 (file-attributes "~/" id-format))) + (nth 3 (tramp-handle-file-attributes "~/" id-format))) ;; Some predefined connection properties. (defun tramp-get-remote-coding (vec prop)