เครื่องหมายการจัดการดูเหมือนไม่จำเป็นและอาจเป็นปัญหาได้
เห็นได้ชัดว่ามีฟังก์ชั่นที่น่าเบื่อในการทำสิ่งนี้ (แม้ว่าจะไม่มีการบันทึกไว้อย่างดี) นี่เป็นวิธีง่ายๆ:
;; 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
ถ้าคำถามนี้เป็นง่ายๆเป็นลักษณะทั้งหมดที่คุณต้องการก็คือ