【问题标题】:Dynamic "magit" Git executable depending on environment in Emacs lisp取决于 Emacs lisp 中环境的动态“magit”Git 可执行文件
【发布时间】:2010-11-08 18:38:11
【问题描述】:

我在我的两台 Mac 上使用 Git,每台 Mac 都有不同的可执行路径(一个是自制软件,一个是 make/install'd)。我也通过 Tramp 模式使用 Git。

所以基本上我想要这个,用伪代码:

if home mac:
    (setq magit-git-executable "~/Projects/homebrew/bin/git")
else if work mac:
    (setq magit-git-executable "/usr/local/git/bin/git")
else [if in tramp mode]:
    (setq magit-git-executable "git") ;; Linux can work this out so don't need a full path

如果 Emacs 尊重我的 setenv("PATH") 配置,这将作为最后一个子句正常工作,但似乎没有。

在 Elisp 中是否有解决此问题的好方法,以便我的 emacs.d 可以在机器之间保持可移植性?如果做不到这一点,是否可以在我通过 tramp 编辑文件时设置变量?

【问题讨论】:

    标签: linux macos emacs elisp


    【解决方案1】:

    如果您坚持 magit-git-executable 在 Tramp 缓冲区中取一个值,如果不在则取另一个值,这将是一件棘手的事情。将magit-git-executable 保留为默认值"git" 会更容易,并根据您使用的机器调整exec-path

    您如何区分您的机器?按名字?如果是这样,那么可能是这样的:

    (require 'cl)
    (loop for (name . dir) in '(("home.local" . "~/Projects/homebrew/bin")
                                ("work.local" . "/usr/local/git/bin"))
          if (string= (system-name) name)
          do (push dir exec-path))
    

    【讨论】:

    • 假设我将它保留为“git”,我如何让 Emacs 尊重我的路径?我拥有完整路径的唯一原因是它似乎不喜欢我的 setenv("PATH") 东西。
    • PATH 环境变量只影响通过 shell 启动的程序。当程序直接启动时(例如通过call-processprocess-file),搜索的是exec-path 列表。 magit 扩展通过process-file 启动git,所以你需要设置exec-path
    • exec-path 就是答案。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-06
    • 1970-01-01
    • 1970-01-01
    • 2017-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多