Как получить домашний каталог логина для буфера в emacs с помощью elisp?

Мне нужен единый способ получить путь к домашнему каталогу. Как для обычных буферов, так и для загружаемых через трамп. Я пытаюсь заставить 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))
(getenv "HOME")?
Drew 09.04.2019 16:08
"~" не работает?
Thomas 10.04.2019 08:12

Проблема в том, что я получаю расширенную среду на удаленной машине. т.е. /home/username/.zsh_history , но comint пытается загрузить этот путь с локальной машины. Я думаю, мне понадобится способ получить расширенный домашний каталог с сохраненным префиксом бродяги. т.е. /ssh:x@y:/home/user/.zsh_history. Как это сделать ИДК.

Sai Prasanna 10.04.2019 08:15

Я нашел похожий вопрос на Reddit. Этот фрагмент кода может служить источником вдохновения — похоже, он может определить удаленный домашний каталог.

legoscia 10.04.2019 13:40

@legoscia Спасибо!! , Смог адаптировать его. Вы помогли emacs n00b написать его первую часть elisp...

Sai Prasanna 10.04.2019 15:58

Рад слышать! Вы можете опубликовать свой код в качестве ответа на свой вопрос, чтобы помочь будущим посетителям.

legoscia 10.04.2019 16:01
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
6
987
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Используя макрос 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")

Использование первой формы описано в документации к функции.

Другие вопросы по теме