Thao tác đánh dấu dường như không cần thiết, và có lẽ có vấn đề.
Rõ ràng là có chức năng trong dired để làm điều này (mặc dù không được ghi chép rõ ràng). Đây là một cách tiếp cận đơn giản:
;; 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)))
Biên tập:
Trong các bình luận bạn nói rằng bạn muốn danh sách kết quả bao gồm các đường dẫn thư mục cũng như các đường dẫn tệp.
dired-map-dired-file-lines
loại trừ rõ ràng các thư mục và không có tùy chọn để bao gồm chúng; nhưng thật dễ dàng để xác định một chức năng, đơn giản bằng cách sao chép bản gốc và bỏ qua bài kiểm tra không mong muốn:
(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)))))
Chỉ cần sử dụng này thay dired-map-dired-file-lines
cho chức năng ban đầu. Sau đó, bạn cũng có thể loại trừ declare-function
cuộc gọi.
Tất nhiên, bạn có thể sửa đổi thêm chức năng mới này để xây dựng danh sách mong muốn trực tiếp, thay vì gọi một chức năng để làm điều đó. Tôi cảm thấy cách tiếp cận tổng quát hơn là tốt trong thực tế, nhưng bạn có thể thích ý tưởng gói tất cả vào một chức năng duy nhất.
directory-files
.