2008-11-15 24 views
14

Al tener una ruta relativa, ¿cómo puedo convertirla en una ruta absoluta desde la ubicación donde está el archivo elisp que estoy cargando? Es decir, tengo un archivo elisp que estoy cargando, tiene una ruta relativa y necesito uno completo.Ruta relativa a la ruta absoluta en Elisp

Respuesta

17
'file-truename 

De la documentación:

Retorno del nombre verdadero del nombre del archivo, el cual debe ser absoluta. El nombre verdadero de un nombre de archivo se encuentra buscando enlaces simbólicos tanto en el nivel del archivo como a nivel de los directorios que lo contienen, hasta que no quedan enlaces en cualquier nivel.

La otra solución ofrecida ('expand-file-name') deja enlaces simbólicos en su lugar, que pueden ser o no lo que usted desea. 'file-truename utiliza' expand-file-name, por lo que ambos determinarán la ruta relativa del directorio predeterminado para el búfer (que es lo que estás pidiendo).

Después de ver el comentario/pregunta en una respuesta diferente, el problema es que el directorio predeterminado es el del búfer que está llamando 'cargar'.

Afortunadamente, hay una variable que 'carga conjuntos que almacena la ruta al archivo que se está cargando. Pruebe este fragmento de código a cabo:

;; this is in the file being loaded 
(let ((default-directory (file-name-directory load-file-name))) 
    (file-truename "blih")) 
+0

¿Funciona también con directorios? – Pablo

5

Puede usar la función expand-file-name para convertir un nombre de archivo o ruta relativa en un nombre de archivo/ruta de acceso absolutos. Mire here para obtener información adicional.

+0

El problema es que cuando la carga ~/bla/bleh.el y evalúa (expand-file-name "blih") termino con ~/blih en lugar de ~/blah/blih. Lo necesito en relación a dónde está el archivo, no a dónde estoy cuando descargo el archivo. Gracias. – Pablo

10

Terminé usando:

(expand-file-name "relative/path" (file-name-directory load-file-name)) 
+1

Si quiere ser más robusto, puede usar '(file-name-directory (o load-file-name buffer-file-name)'. Esto funcionará cuando se carga el archivo o se evalúa el código en él usando, por ejemplo Cx Ce. –

Cuestiones relacionadas