Manipuler les marques semble inutile et peut-être problématique.
De toute évidence, il y a des fonctionnalités dans dired pour faire ce genre de chose (bien que ce ne soit pas bien documenté). Voici une approche simple:
;; Silence compile-time warning:
(declare-function dired-map-dired-file-lines "dired-aux")
(defun my-dired-files ()
"Return a list of files (only) in the current dired buffer."
(eval-when-compile (require 'cl-lib))
(require 'dired-aux)
(let (flist)
(cl-flet ((fpush (fname) (push fname flist)))
(dired-map-dired-file-lines #'fpush))
(nreverse flist)))
Éditer:
Dans les commentaires, vous dites que vous souhaitez que la liste résultante inclue les chemins de répertoire ainsi que les chemins de fichier.
dired-map-dired-file-lines
exclut explicitement les répertoires et il n'y a pas d'option pour les inclure; mais il est facile de définir une fonction qui le fait, simplement en copiant l'original et en omettant le test indésirable:
(defun my-dired-map-over-files-and-dirs (fun)
"Perform FUN with point at the end of each file or directory line.
FUN takes one argument, the absolute filename."
(save-excursion
(let (file buffer-read-only)
(goto-char (point-min))
(while (not (eobp))
(save-excursion
(and (not (eolp))
(setq file (dired-get-filename nil t)) ; nil on non-file
(progn (end-of-line)
(funcall fun file))))
(forward-line 1)))))
Utilisez-le simplement à la place de dired-map-dired-file-lines
dans la fonction initiale. Vous pouvez également exclure également l' declare-function
appel.
Vous pouvez, bien sûr, modifier davantage cette nouvelle fonction pour créer directement la liste souhaitée, au lieu d'appeler une fonction pour le faire. Je pense que l'approche plus générale est bien en pratique, mais vous préférerez peut-être l'idée de tout regrouper dans une seule fonction.
directory-files
.