From fe67c36cd9bb2967e0c2eca3d4a31c0950130eb7 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Sat, 9 Dec 2023 23:57:35 -0500 Subject: [PATCH] (dired): Remove `ls-lisp` advice `ls-lisp` used to advise `dired` because `dired-insert-directory` blindly used `insert-directory-program` (together with a shell) in order to implement the "directory wildcard" expansion. * lisp/dired.el (dired-insert-directory): Make the "directory wildcard" code obey `files--use-insert-directory-program-p`, using `file-expand-wildcards`. * lisp/ls-lisp.el (ls-lisp--dired, ls-lisp-unload-function): Delete funs. (dired): Don't advise any more. --- lisp/dired.el | 17 ++++++++++------- lisp/ls-lisp.el | 36 ------------------------------------ 2 files changed, 10 insertions(+), 43 deletions(-) diff --git a/lisp/dired.el b/lisp/dired.el index c11b107213b..ace4bbf5776 100644 --- a/lisp/dired.el +++ b/lisp/dired.el @@ -1696,7 +1696,7 @@ see `dired-use-ls-dired' for more details.") ;; Expand directory wildcards and fill file-list. (let ((dir-wildcard (and (null file-list) wildcard (insert-directory-wildcard-in-dir-p dir)))) - (cond (dir-wildcard + (cond ((and dir-wildcard (files--use-insert-directory-program-p)) (setq switches (concat "-d " switches)) (let* ((default-directory (car dir-wildcard)) (script (format "%s %s %s" @@ -1723,12 +1723,15 @@ see `dired-use-ls-dired' for more details.") ;; month names; but this should not be necessary any ;; more, with the new value of ;; `directory-listing-before-filename-regexp'. - (file-list - (dolist (f file-list) - (let ((beg (point))) - (insert-directory f switches nil nil) - ;; Re-align fields, if necessary. - (dired-align-file beg (point))))) + ((or file-list dir-wildcard) + (let ((default-directory + (or (car dir-wildcard) default-directory))) + (dolist (f (or file-list + (file-expand-wildcards (cdr dir-wildcard)))) + (let ((beg (point))) + (insert-directory f switches nil nil) + ;; Re-align fields, if necessary. + (dired-align-file beg (point)))))) (t (insert-directory dir switches wildcard (not wildcard)))) ;; Quote certain characters, unless ls quoted them for us. diff --git a/lisp/ls-lisp.el b/lisp/ls-lisp.el index 141d1f32c09..c0a52d76a25 100644 --- a/lisp/ls-lisp.el +++ b/lisp/ls-lisp.el @@ -449,36 +449,6 @@ not contain `d', so that a full listing is expected." "Directory doesn't exist or is inaccessible" file)))))) -(declare-function dired-read-dir-and-switches "dired" (str)) -(declare-function dired-goto-next-file "dired" ()) - -(defun ls-lisp--dired (orig-fun dir-or-list &optional switches) - (interactive (dired-read-dir-and-switches "")) - (unless dir-or-list - (setq dir-or-list default-directory)) - (if (consp dir-or-list) - (funcall orig-fun dir-or-list switches) - (let ((dir-wildcard (insert-directory-wildcard-in-dir-p - (expand-file-name dir-or-list)))) - (if (not dir-wildcard) - (funcall orig-fun dir-or-list switches) - (let* ((default-directory (car dir-wildcard)) - (files (file-expand-wildcards (cdr dir-wildcard))) - (dir (car dir-wildcard))) - (if files - (let ((inhibit-read-only t) - (buf - (apply orig-fun (nconc (list dir) files) (and switches (list switches))))) - (with-current-buffer buf - (save-excursion - (goto-char (point-min)) - (dired-goto-next-file) - (forward-line 0) - (insert " wildcard " (cdr dir-wildcard) "\n")))) - (user-error "No files matching wildcard"))))))) - -(advice-add 'dired :around #'ls-lisp--dired) - (defun ls-lisp-sanitize (file-alist) "Sanitize the elements in FILE-ALIST. Fixes any elements in the alist for directory entries whose file @@ -866,12 +836,6 @@ All ls time options, namely c, t and u, are handled." file-size) (format " %7s" (file-size-human-readable file-size)))) -(defun ls-lisp-unload-function () - "Unload ls-lisp library." - (advice-remove 'dired #'ls-lisp--dired) - ;; Continue standard unloading. - nil) - (defun ls-lisp--sanitize-switches (switches) "Convert long options of GNU \"ls\" to their short form. Conversion is done only for flags supported by ls-lisp. -- 2.39.2