如何使用elisp获取emacs中缓冲区登录的主目录?

问题描述 投票:1回答:2

我想要一个统一的方法来获取主目录路径。对于普通缓冲区和通过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))
shell emacs directory environment-variables
2个回答
1
投票

使用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
投票

请注意,您可以通过使用tramp-make-tramp-file-name调用tramp-dissect-file-name来简化上述操作,例如。

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

使用它在函数文档中描述的第一个表单。

© www.soinside.com 2019 - 2024. All rights reserved.