2012-02-24 36 views
3

當我啓動emacs GUI時,根據我的.zshrc沒有設置PATH。我如何獲得我的.zshrc正確設置?如何在emacs中輸入我的.zshrc?

編輯:我正在嘗試使用swank-clojure,但找不到lein,因爲它不在PATH上。

+0

你是指'shell-mode'或'eshell'中使用的'PATH'嗎? – pmr 2012-02-24 17:34:17

回答

1

這個答案是後來誰發現了這個問題,並有因爲Mac上的Emacs默認行爲,這個問題的人,

如果你是一個Mac上,不知道如何得到的emacs從shell啓動在那裏將皮卡在圖形模式下的文本,而不是您的自定義ENV才從zsh中像這樣的東西來啓動它:

/Applications/Emacs.app/Contents/MacOS/Emacs 

這應當引起emacs的看到所有你的shell(zsh的或其他方式)的自定義。

+1

這肯定會起作用,但是沒有辦法在Mac OS上更改登錄shell?那將是明確的解決方案。 – pmr 2012-02-24 19:32:16

+0

我對這個問題很感興趣,我認爲這是一個非常適合超級用戶的問題 – 2012-02-24 19:33:41

+0

@pmr,@ArthurUlfeldt可以使用'chsh'命令(如許多其他Un * ces)來更改登錄shell。不過,我不確定這是否會影響Emacs。 – 2012-02-25 13:20:22

1

變量Emacs使用而不是PATH稱爲exec-pathC-h v exec-path RET爲文檔和狀態)。 exec-pathPATHEMACSPATH初始化。看起來你並沒有從你的zsh上啓動Emacs,所以你的Emacs路徑並不完全匹配你的shell。

您可能會嘗試在您的.emacs或​​中設置exec-path,但您必須同時維護兩者。我沒有看到任何方式直接獲取你的shell配置,但也許你可以將你的路徑從它中排除。

8

編輯添加(2014):現在有一個package in MELPA名爲exec-path-from-shell,它解決了這個確切的問題。 (另見Github repository)。安裝該軟件包幾乎肯定會更好,而不是複製並粘貼此代碼段。除了正確維護之外,它還支持從shell安裝中複製其他環境變量,所以從Emacs啓動的任何子進程都能按預期工作。


原來的答覆: 這裏是我對於這個問題,不需要總是從shell啓動Emacs(我也懶得用這有時會在我的Mac)解決方法:

(let ((path (shell-command-to-string ". ~/.zshrc; echo -n $PATH"))) 
    (setenv "PATH" path) 
    (setq exec-path 
     (append 
     (split-string-and-unquote path ":") 
     exec-path))) 

它設置Emacs的PATH環境變量(所以它將由子殼繼承)和Lisp變量exec-path的想法,該變量用於從Lisp代碼中查找可執行文件並用於某些自動完成目的。您可能還需要檢查shell-file-name是否定製爲您的zsh二進制文件的位置,而不是默認的/bin/bash

+0

太棒了,這在Linux下完美運行。 – 2014-10-24 16:46:47

+1

FWIW,因爲我寫了這個答案,現在有一個[MELPA包](http://melpa.org/#/exec-path-from-shell)解決了這個問題,命名爲'exec-path-from-shell '。最好安裝該軟件包,而不是複製並粘貼此代碼段。除了正確維護外,它還允許從常規shell設置中複製其他環境變量,所以從Emacs啓動的任何子進程都將按預期工作。 – 2014-10-24 22:56:10

4

FWIW,這個問題並不是特定於Mac OS X,因爲它也會影響GNU/Linux系統,從GUI的菜單欄啓動Emacs通常會導致Emacs的啓動路徑不同於啓動的Emacs從命令行。這個問題可以追溯到第一個`xdm'Xsession腳本,雖然它們很容易修復(基本上使用Xsessionwrapper腳本執行「exec $ SHELL -c Xsession」,因此shell在運行用戶的Xsession之前運行),這裏我們在20年後面臨同樣的老問題。不知何故,我不希望gdm3解決這個問題;-(

+0

雖然不是一個真正的答案,但它的傳聞價值很高。 – pmr 2012-02-25 14:06:16

+0

它主要是固定在gdm2中,它可以獲得.profile和.xprofile,但是從我聽到的它在gdm3中再次被破壞。當檢測到zsh時,Kdm似乎做了一些瘋狂的事情,並開始通過zsh運行所有內容,而不使用兼容模式。 – Arrowmaster 2012-02-25 20:43:53

1

Mac OS X有一個special environment file允許爲特定用戶啓動的進程設置環境變量,允許您爲GUI應用程序設置環境變量。情況下,你可以用它來設置通過單擊碼頭或取景器的圖標來啓動任何的emacs的路徑。

此文件住在

~/.MacOSX/environment.plist 

您可以在Xcode中創建的文件,但它只是普通的xml文件的內容如下所示:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
    <dict> 
    <key>PATH</key> 
    <string>~/bin:/usr/local/bin:/usr/local/sbin:/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/X11/bin:</string> 
</dict> 
</plist> 
0

您還可以在.zshenv文件中指定PATH變量 - 爲子shell分配環境的首選約定。只要將zsh配置爲用戶的默認shell,emacs將源自您的.zshenv,而不管emacs如何被調用。

相關問題