Относительный путь к абсолютному пути в Элиспе - PullRequest
18 голосов
/ 15 ноября 2008

Имея относительный путь, как мне превратить его в абсолютный путь из того места, где находится загружаемый мной файл elisp. То есть у меня есть файл elisp, который я загружаю, у него есть относительный путь, и мне нужен абсолютный.

Ответы [ 3 ]

21 голосов
/ 15 ноября 2008
'file-truename

Из документации:

Вернуть имя FILENAME, которое должен быть абсолютным. Truename of a имя файла найдено в погоне за символикой ссылки как на уровне файла и на уровне каталогов содержащие его, пока не останется ссылок на любом уровне.

Другое предлагаемое решение ('имя-файла-расширения) оставляет на месте символические ссылки, которые могут быть, а могут и не совпадать с вашими. 'file-truename использует' expand-file-name, поэтому они оба будут определять относительный каталог по умолчанию для буфера (который вы запрашиваете).

После просмотра комментария / вопроса к другому ответу проблема заключается в том, что каталогом по умолчанию является каталог буфера, который вызывает 'load.

К счастью, есть переменная, которая 'загружает наборы и хранит путь к загружаемому файлу. Попробуйте этот фрагмент кода:

;; this is in the file being loaded
(let ((default-directory (file-name-directory load-file-name)))
   (file-truename "blih"))
13 голосов
/ 15 ноября 2008

Я закончил, используя:

(expand-file-name "relative/path" (file-name-directory load-file-name))
8 голосов
/ 15 ноября 2008

Вы можете использовать функцию expand-file-name для преобразования относительного имени файла или пути в абсолютное имя файла / путь. Смотрите здесь для получения дополнительной информации.

...