Мне нужен единый способ получить путь к домашнему каталогу. Как для обычных буферов, так и для загружаемых через трамп. Я пытаюсь заставить comint для оболочки использовать файл истории в логине для буфера. т.е. локальный файл для обычных буферов и удаленный файл для трамповых буферов.
(add-hook 'shell-mode-hook 'my-shell-mode-hook)
(defun my-shell-mode-hook ()
(setq comint-input-ring-file-name
(substitute-in-file-name "~/.zsh_history"))
;; Ignore timestamps in history file. Assumes that zsh
;; EXTENDED_HISTORY option is in use.
(setq comint-input-ring-separator "\n: \\([0-9]+\\):\\([0-9]+\\);")
(comint-read-input-ring t))
"~"
не работает?
Проблема в том, что я получаю расширенную среду на удаленной машине. т.е. /home/username/.zsh_history , но comint пытается загрузить этот путь с локальной машины. Я думаю, мне понадобится способ получить расширенный домашний каталог с сохраненным префиксом бродяги. т.е. /ssh:x@y:/home/user/.zsh_history. Как это сделать ИДК.
Я нашел похожий вопрос на Reddit. Этот фрагмент кода может служить источником вдохновения — похоже, он может определить удаленный домашний каталог.
@legoscia Спасибо!! , Смог адаптировать его. Вы помогли emacs n00b написать его первую часть elisp...
Рад слышать! Вы можете опубликовать свой код в качестве ответа на свой вопрос, чтобы помочь будущим посетителям.
Используя макрос with-parsed-tramp-file-name, вы можете построить путь к файлу удаленной системы. А затем используйте «~» для доступа к домашней папке.
(defun my-shell-mode-hook ()
(setq comint-input-ring-file-name
(if (file-remote-p default-directory)
(with-parsed-tramp-file-name default-directory nil
(tramp-make-tramp-file-name
(tramp-file-name-method v)
(tramp-file-name-user v)
(tramp-file-name-domain v)
(tramp-file-name-host v)
(tramp-file-name-port v)
"~/.zsh_history"))
"~/.zsh_history"))
Обратите внимание, что вы можете упростить описанное выше, просто вызвав tramp-make-tramp-file-name
с tramp-dissect-file-name
, например.
(tramp-make-tramp-file-name
(tramp-dissect-file-name default-directory)
"~/.zsh_history")
Использование первой формы описано в документации к функции.
(getenv "HOME")
?