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

时间:2019-04-09 04:23:39

标签: shell emacs directory environment-variables

我想要一种统一的方法来获取主目录路径。对于普通缓冲区和通过流浪汉加载的缓冲区。 我试图使comint for shell使用登录名中的历史记录文件作为缓冲区。即本地文件(如果是普通缓冲区)和远程文件(用于流浪汉缓冲区)。

    (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 个答案:

答案 0 :(得分: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"))

答案 1 :(得分:0)

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

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

使用功能文档中描述的第一种形式。