diff options
Diffstat (limited to 'lisp/net/tramp-archive.el')
-rw-r--r-- | lisp/net/tramp-archive.el | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/lisp/net/tramp-archive.el b/lisp/net/tramp-archive.el index 47f14861e38..4f106a6b593 100644 --- a/lisp/net/tramp-archive.el +++ b/lisp/net/tramp-archive.el @@ -227,7 +227,7 @@ It must be supported by libarchive(3).") (delete-file . tramp-archive-handle-not-implemented) ;; `diff-latest-backup-file' performed by default handler. (directory-file-name . tramp-archive-handle-directory-file-name) - (directory-files . tramp-handle-directory-files) + (directory-files . tramp-archive-handle-directory-files) (directory-files-and-attributes . tramp-handle-directory-files-and-attributes) (dired-compress-file . tramp-archive-handle-not-implemented) @@ -612,6 +612,27 @@ offered." ;; example. So we return `directory'. directory))) +(defun tramp-archive-handle-directory-files + (directory &optional full match nosort count) + "Like `directory-files' for Tramp files." + (unless (file-exists-p directory) + (tramp-error (tramp-dissect-file-name directory) 'file-missing directory)) + (when (file-directory-p directory) + (setq directory (file-name-as-directory (expand-file-name directory))) + (let ((temp (nreverse (file-name-all-completions "" directory))) + result item) + + (while temp + (setq item (directory-file-name (pop temp))) + (when (or (null match) (string-match-p match item)) + (push (if full (concat directory item) item) + result))) + (unless nosort + (setq result (sort result #'string<))) + (when (and (natnump count) (> count 0)) + (setq result (tramp-compat-ntake count result))) + result))) + (defun tramp-archive-handle-dired-uncache (dir) "Like `dired-uncache' for file archives." (dired-uncache (tramp-archive-gvfs-file-name dir))) |