Как получить домашний каталог логина для буфера в emacs, используя elisp? - PullRequest
1 голос
/ 09 апреля 2019

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

    (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))

Ответы [ 2 ]

1 голос
/ 10 апреля 2019

Используя макрос 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"))
0 голосов
/ 14 апреля 2019

Обратите внимание, что вы можете упростить вышесказанное, просто вызвав tramp-make-tramp-file-name с помощью tramp-dissect-file-name, например.

(tramp-make-tramp-file-name
  (tramp-dissect-file-name default-directory)
   "~/.zsh_history")

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

...