Расширьте абсолютные имена файлов с помощью информации о хосте Tramp

В конечном счете, я хочу вызвать elisp (find-file "/abs/olute/file.name"), когда (file-remote-p default-directory) не равен нулю, и чтобы удаленный хост применялся к абсолютному имени файла в вызове find-file.

Фактический вариант использования: у меня есть сеанс в режиме оболочки на удаленном хосте, где default-directory имеет форму "/meth:user@host:/abs/path/". Я добавил команду в режиме оболочки, которая открывает файл в новом буфере. Если я отправлю относительное имя файла, удаленный файл откроется правильно; если я отправляю абсолютный путь к файлу (начинается с «/» или «~»), он оценивается относительно моего локального контекста, а не удаленного.

Я могу обернуть функцию так, чтобы удаленная информация прикреплялась перед абсолютным путем к файлу до его открытия, но мне было интересно, есть ли функция TRAMP или переменная, которую я могу использовать для принудительного использования удаленного хоста для абсолютных путей к файлам . Обратите внимание, что относительные пути обрабатываются надлежащим образом при правильном применении удаленного хоста и пути из каталога по умолчанию.


person Michael    schedule 29.11.2014    source источник


Ответы (2)


Нет такой функции Бродяги. (find-file "/abs/olute/file.name") знает, что имя файла локальное, и Бродягу не вызывает.

Так что вы действительно должны реализовать это самостоятельно.

person Michael Albinus    schedule 07.12.2014

Вот что я использую:

(defun expand-file-name-remote (file)
  "A tramp-friendly version of expand-file-name.  Expand file
relative to the remote part of default-directory."
  (let ((file (expand-file-name file))
        (dir-remote (file-remote-p default-directory)))
    (if (file-remote-p file)
        ;; if file is already remote, return it
        file
      ;; otherwise prepend the remote part (if any) of default-directory
      (concat dir-remote file)
      )))
person noelbk    schedule 22.05.2020