हेर-फेर के निशान अनावश्यक और शायद समस्याग्रस्त लगते हैं।
जाहिर है कि इस तरह की चीज़ करने की हिम्मत के भीतर कार्यक्षमता है (यद्यपि अच्छी तरह से प्रलेखित नहीं है)। यहाँ एक सरल तरीका है:
;; 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
।