ฟังก์ชันที่ส่งคืนพา ธ สัมบูรณ์พาเรนต์ไดเร็กทอรี


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

จะช่วยให้

    "/home/sk/parent"

แล้ว

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

จะช่วยให้

"/home/sk"

ฟังก์ชัน elisp ใด ๆparent-dirที่ให้ basepath สำหรับทั้งพา ธ ไฟล์และพา ธ dir?

คำตอบ:


14

file-name-directory ทำในสิ่งที่คุณร้องขอ

อย่างไรก็ตาม, (file-name-directory "/home/sk/parent/")(ที่มีเครื่องหมายสแลชต่อท้าย) จะส่งคืนไดเร็กทอรีเดียวกันนั้นไม่ใช่พาเรนต์

นี้ไม่ว่าสิ่งที่ฉันเดาคุณจริงๆต้องการ:

(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/"

และไลบรารี่ Dired +ใช้ฟังก์ชั่นนี้:

(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))))

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.