From 9ecd6553adedb447a60da9dcc3efe5158f796155 Mon Sep 17 00:00:00 2001 From: Michael Albinus Date: Sat, 19 Aug 2023 19:32:09 +0200 Subject: [PATCH] Extend T * lisp/net/tramp.el (tramp-completion-file-name-handler-alist): Add `file-directory-p'. (tramp-completion-handle-file-directory-p): New defun. --- lisp/net/tramp.el | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el index a0092a2d706..30602c353b3 100644 --- a/lisp/net/tramp.el +++ b/lisp/net/tramp.el @@ -1410,6 +1410,7 @@ during direct remote copying with scp.") (defconst tramp-completion-file-name-handler-alist '((expand-file-name . tramp-completion-handle-expand-file-name) + (file-directory-p . tramp-completion-handle-file-directory-p) (file-exists-p . tramp-completion-handle-file-exists-p) (file-name-all-completions . tramp-completion-handle-file-name-all-completions) @@ -2643,6 +2644,29 @@ not in completion mode." (concat dir filename)) (t (tramp-run-real-handler #'expand-file-name (list filename directory)))))) +;; This is needed in pcomplete.el. +(defun tramp-completion-handle-file-directory-p (filename) + "Like `file-directory-p' for partial Tramp files." + ;; We need special handling only when a method is needed. Then we + ;; regard all files "/method:" or "/[method/" as existent, if + ;; "method" is a valid Tramp method. + (or (string-equal filename "/") + (and ;; Is it a valid method? + (not (string-empty-p tramp-postfix-method-format)) + (string-match + (rx + (regexp tramp-prefix-regexp) + (* (regexp tramp-remote-file-name-spec-regexp) + (regexp tramp-postfix-hop-regexp)) + (group-n 9 (regexp tramp-method-regexp)) + (? (regexp tramp-postfix-method-regexp)) + eos) + filename) + (assoc (match-string 9 filename) tramp-methods) + t) + + (tramp-run-real-handler #'file-directory-p (list filename)))) + (defun tramp-completion-handle-file-exists-p (filename) "Like `file-exists-p' for partial Tramp files." ;; We need special handling only when a method is needed. Then we @@ -2650,7 +2674,7 @@ not in completion mode." ;; "method" is a valid Tramp method. And we regard all files ;; "/method:user@", "/user@" or "/[method/user@" as existent, if ;; "user@" is a valid file name completion. Host completion is - ;; performed in the respective backen operation. + ;; performed in the respective backend operation. (or (and (cond ;; Completion styles like `flex' and `substring' check for ;; the file name "/". This does exist. -- 2.39.5