İşaretleri değiştirmek gereksiz ve belki de sorunlu görünüyor.
Açıkçası bu tür bir şey yapmak için yönetilen işlevsellik vardır (iyi belgelenmiş olmasa da). İşte basit bir yaklaşım:
;; 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)))
Düzenle:
Yorumlarda, sonuç listesinin dosya yollarının yanı sıra dizin yollarını da içermesini istediğinizi söylersiniz.
dired-map-dired-file-lines
dizinleri açıkça hariç tutar ve bunları dahil etme seçeneği yoktur; ancak orijinali kopyalayarak ve istenmeyen testi atlayarak bir işlevi tanımlamak kolaydır:
(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)))))
Bunu dired-map-dired-file-lines
ilk işlev yerine kullanın. Daha sonra declare-function
aramayı da hariç tutabilirsiniz .
Elbette, bunu yapmak için bir işlev çağırmak yerine, istenen listeyi doğrudan oluşturmak için bu yeni işlevi daha fazla değiştirebilirsiniz. Uygulamada daha genel yaklaşımın iyi olduğunu düşünüyorum, ancak hepsini tek bir işleve sarma fikrini tercih edebilirsiniz.
directory-files
.