Linux “动态”;magit“;Git可执行文件取决于Emacs lisp中的环境

Linux “动态”;magit“;Git可执行文件取决于Emacs lisp中的环境,linux,macos,emacs,elisp,Linux,Macos,Emacs,Elisp,我在我的2台Mac电脑上使用Git,每台电脑都有不同的可执行路径(一个是自制的,一个是制作/安装的)。我还通过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 tr

我在我的2台Mac电脑上使用Git,每台电脑都有不同的可执行路径(一个是自制的,一个是制作/安装的)。我还通过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编辑文件时设置变量?

如果您坚持
magit git executable
在tramp缓冲区中取一个值,如果不在,则取另一个值,这将是一件棘手的事情。将
magit git executable
保留为默认值
“git”
,并根据您所使用的机器调整
执行路径将更容易

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

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

如果你坚持要
magit-git-executable
在Tramp缓冲区中取一个值,如果不是,则取另一个值,这将是一件棘手的事情。将
magit git executable
保留为默认值
“git”
,并根据您所使用的机器调整
执行路径将更容易

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

(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启动的程序。直接启动程序时(例如通过
调用进程
进程文件
),搜索的是
执行路径
列表。
magit
扩展通过
processfile
启动git,因此需要设置
exec path
exec path
就是答案。非常感谢!假设我将其保留为“git”,我如何让Emacs尊重我的路径?我拥有完整路径的唯一原因是它似乎不喜欢我的setenv(“PATH”)东西。
PATH
环境变量只影响通过shell启动的程序。直接启动程序时(例如通过
调用进程
进程文件
),搜索的是
执行路径
列表。
magit
扩展通过
processfile
启动git,因此需要设置
exec path
exec path
就是答案。非常感谢!