Percorso relativo al percorso assoluto in Elisp
Domanda
Avendo un percorso relativo, come posso trasformarlo in uno assoluto dalla posizione in cui si trova il file elisp che sto caricando. Cioè, ho un file elisp che sto caricando, ha un percorso relativo e ne ho bisogno uno assoluto.
Soluzione
'file-truename
Dalla documentazione:
Restituisce il truename di FILENAME, che dovrebbe essere assoluto. Il truename di a il nome del file si trova inseguendo simbolico collega entrambi a livello del file e a livello delle directory contenendolo, fino a quando non rimangono più collegamenti a qualsiasi livello.
L'altra soluzione offerta ("nome-file-espanso) lascia al suo posto collegamenti simbolici, che possono essere o meno ciò che si desidera. 'file-truename utilizza' nome-file-espanso, quindi entrambi determineranno il percorso relativo alla directory predefinita per il buffer (che è ciò che stai chiedendo).
Dopo aver visto il commento / la domanda con una risposta diversa, il problema è che la directory predefinita è quella del buffer che chiama 'load.
Fortunatamente, esiste una variabile che carica i set che memorizza il percorso del file da caricare. Prova questo frammento di codice:
;; this is in the file being loaded
(let ((default-directory (file-name-directory load-file-name)))
(file-truename "blih"))
Altri suggerimenti
Ho finito per usare:
(expand-file-name "relative/path" (file-name-directory load-file-name))
Puoi usare la funzione expand-file-name
per convertire un relativo nome o percorso in un nome / percorso assoluto. Guarda qui per ulteriori informazioni.