]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix expansion of wildcards in ls-lisp.el
authorEli Zaretskii <eliz@gnu.org>
Sun, 15 Jan 2023 08:47:24 +0000 (10:47 +0200)
committerEli Zaretskii <eliz@gnu.org>
Sun, 15 Jan 2023 08:47:24 +0000 (10:47 +0200)
* lisp/ls-lisp.el (ls-lisp--dired): Fix error message text.
Handle the case of a wildcard specifying directories.  (Bug#60819)

lisp/ls-lisp.el

index 217bebcfcb2cd92a384867b634824d29d6e70235..81ff14932c601950a7c313ec68017d6a6eac3120 100644 (file)
@@ -482,8 +482,22 @@ not contain `d', so that a full listing is expected."
       (if (not dir-wildcard)
           (funcall orig-fun dir-or-list switches)
         (let* ((default-directory (car dir-wildcard))
-               (files (file-expand-wildcards (cdr dir-wildcard)))
+               (wildcard (cdr dir-wildcard))
+               (files (file-expand-wildcards wildcard))
                (dir (car dir-wildcard)))
+          ;; When the wildcard ends in a slash, file-expand-wildcards
+          ;; returns nil; fix that by treating the wildcards as
+          ;; specifying only directories whose names match the
+          ;; widlcard.
+          (if (and (null files)
+                   (directory-name-p wildcard))
+              (setq files
+                    (delq nil
+                          (mapcar (lambda (fname)
+                                   (if (file-accessible-directory-p fname)
+                                        fname))
+                                 (file-expand-wildcards
+                                   (directory-file-name wildcard))))))
           (if files
               (let ((inhibit-read-only t)
                     (buf
@@ -494,7 +508,7 @@ not contain `d', so that a full listing is expected."
                     (dired-goto-next-file)
                     (forward-line 0)
                     (insert "  wildcard " (cdr dir-wildcard) "\n"))))
-            (user-error "No files matching regexp")))))))
+            (user-error "No files matching wildcard")))))))
 
 (advice-add 'dired :around #'ls-lisp--dired)