我想要一个统一的方法来获取主目录路径。对于普通缓冲区和通过tramp加载的缓冲区。我试图让shell使用登录中的历史文件来获取缓冲区。即本地文件(如果是普通缓冲区)和远程文件(用于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))
使用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")
使用它在函数文档中描述的第一个表单。