Маніпуляція позначками видається непотрібною і, можливо, проблематичною.
Очевидно, є можливість функціонувати для подібних речей (хоч і недостатньо задокументованих). Ось простий підхід:
;; 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)))
Редагувати:
У коментарях ви говорите, що ви хочете, щоб у результаті в список включили шляхи до каталогу, а також шляхи до файлів.
dired-map-dired-file-lines
явно виключає каталоги, і немає можливості їх включати; але легко визначити функцію, яка виконує, просто скопіювавши оригінал та опустивши небажаний тест:
(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)))))
Просто використовуйте це замість dired-map-dired-file-lines
початкової функції. Потім ви можете також виключити declare-function
дзвінок.
Ви, звичайно, можете додатково змінити цю нову функцію, щоб створити потрібний список безпосередньо, замість того, щоб викликати функцію для цього. Я вважаю, що більш загальний підхід на практиці прекрасний, але ви можете віддати перевагу ідеї об'єднати все це в одну функцію.
directory-files
.