Hàm trả về đường dẫn tuyệt đối của thư mục cha


10
    (parent-dir "/home/sk/parent/ab.el")

cho

    "/home/sk/parent"

sau đó,

(parent-dir "/home/sk/parent")

cho

"/home/sk"

Bất kỳ chức năng elisp parent-dirnào cung cấp cơ sở cho cả đường dẫn tệp & đường dẫn thư mục?

Câu trả lời:


14

file-name-directory làm những gì bạn yêu cầu.

Tuy nhiên, (file-name-directory "/home/sk/parent/")(với dấu gạch chéo) trả về cùng thư mục đó, không phải cha mẹ của nó.

Đây là những gì tôi đoán bạn thực sự muốn:

(file-name-directory (directory-file-name "/home/sk/parent/ab.el")) ; => "/home/sk/parent/"
(file-name-directory (directory-file-name "/home/sk/parent/")) ; => "/home/sk/"
(file-name-directory (directory-file-name "/home/sk/parent")) ; => "/home/sk/"

Và thư viện Dired + sử dụng chức năng này:

(defun diredp-parent-dir (file &optional relativep)
  "Return the parent directory of FILE, or nil if none.
Optional arg RELATIVEP non-nil means return a relative name, that is,
just the parent component."
  (let ((parent  (file-name-directory (directory-file-name (expand-file-name file))))
        relparent)
    (when relativep
      (setq relparent  (file-name-nondirectory (directory-file-name parent))))
    (and (not (equal parent file))  (or relparent  parent))))

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.