চিহ্নগুলি হেরফের করা অপ্রয়োজনীয় এবং সম্ভবত সমস্যাযুক্ত বলে মনে হচ্ছে।
স্পষ্টতই এই ধরণের জিনিসটি করতে ডাইরডের মধ্যে কার্যকারিতা রয়েছে (যদিও তা ভালভাবে ডকুমেন্টেড নয়)। এখানে একটি সহজ পদ্ধতি:
;; 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
।