directories – Función que devuelve la ruta absoluta del directorio principal

Pregunta:

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

da

    "/home/sk/parent"

entonces,

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

da

"/home/sk"

¿Alguna función elisp como parent-dir que proporcione una ruta base para la ruta del archivo y la ruta del directorio?

Respuesta:

file-name-directory hace lo que usted solicita.

Sin embargo, (file-name-directory "/home/sk/parent/") (con una barra inclinada) devuelve ese mismo directorio, no su padre.

Esto hace lo que supongo que realmente quieres:

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

Y la biblioteca Dired + usa esta función:

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

Leave a Comment

Your email address will not be published. Required fields are marked *

web tasarım