2010-11-08 31 views
1

我在我的2個Mac上使用Git,每個Mac都有不同的可執行文件路徑(一個是自制軟件,一個是make/install)。我也通過Tramp模式使用Git。根據Emacs中的環境,動態「magit」Git可執行文件lisp

所以基本上我想這一點,在僞代碼:

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編輯文件時設置變量?

回答

5

如果你堅持magit-git-executable如果你在一個Tramp緩衝區中取值爲1,如果不是,則會有另一個值。將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)) 
+0

假設我把它作爲「混帳」,我如何讓Emacs尊重我的道路?我有完整路徑的唯一原因是因爲它似乎不喜歡我的setenv(「路徑」)的東西。 – 2010-11-08 19:27:42

+4

PATH環境變量隻影響通過shell啓動的程序。當程序直接啓動時(例如通過'call-process'或'process-file'),它就是被搜索的'exec-path'列表。 'magit'擴展通過'process-file'啓動git,所以它是你需要設置的'exec-path'。 – 2010-11-08 19:38:15

+0

''exec-path''就是答案。非常感謝! – 2010-11-09 09:15:29

相關問題