Fonction qui renvoie le chemin absolu du répertoire parent


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

donne

    "/home/sk/parent"

puis,

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

donne

"/home/sk"

Toute fonction elisp comme parent-dircelle qui donne le chemin de base pour le chemin du fichier et le chemin du répertoire?

Réponses:


14

file-name-directory fait ce que vous demandez.

Cependant, (file-name-directory "/home/sk/parent/")(avec une barre oblique de fin) renvoie ce même répertoire, pas son parent.

Cela fait ce que je suppose que vous voulez vraiment :

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

Et la bibliothèque Dired + utilise cette fonction:

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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.