(parent-dir "/home/sk/parent/ab.el")
จะช่วยให้
"/home/sk/parent"
แล้ว
(parent-dir "/home/sk/parent")
จะช่วยให้
"/home/sk"
ฟังก์ชัน elisp ใด ๆparent-dir
ที่ให้ basepath สำหรับทั้งพา ธ ไฟล์และพา ธ dir?
(parent-dir "/home/sk/parent/ab.el")
จะช่วยให้
"/home/sk/parent"
แล้ว
(parent-dir "/home/sk/parent")
จะช่วยให้
"/home/sk"
ฟังก์ชัน elisp ใด ๆparent-dir
ที่ให้ basepath สำหรับทั้งพา ธ ไฟล์และพา ธ dir?
คำตอบ:
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))))
(defun parent-directory (dir)
(unless (equal "/" dir)
(file-name-directory (directory-file-name dir))))