當我啓動emacs GUI時,根據我的.zshrc沒有設置PATH。我如何獲得我的.zshrc正確設置?如何在emacs中輸入我的.zshrc?
編輯:我正在嘗試使用swank-clojure,但找不到lein,因爲它不在PATH
上。
當我啓動emacs GUI時,根據我的.zshrc沒有設置PATH。我如何獲得我的.zshrc正確設置?如何在emacs中輸入我的.zshrc?
編輯:我正在嘗試使用swank-clojure,但找不到lein,因爲它不在PATH
上。
這個答案是後來誰發現了這個問題,並有因爲Mac上的Emacs默認行爲,這個問題的人,
如果你是一個Mac上,不知道如何得到的emacs從shell啓動在那裏將皮卡在圖形模式下的文本,而不是您的自定義ENV才從zsh中像這樣的東西來啓動它:
/Applications/Emacs.app/Contents/MacOS/Emacs
這應當引起emacs的看到所有你的shell(zsh的或其他方式)的自定義。
這肯定會起作用,但是沒有辦法在Mac OS上更改登錄shell?那將是明確的解決方案。 – pmr 2012-02-24 19:32:16
我對這個問題很感興趣,我認爲這是一個非常適合超級用戶的問題 – 2012-02-24 19:33:41
@pmr,@ArthurUlfeldt可以使用'chsh'命令(如許多其他Un * ces)來更改登錄shell。不過,我不確定這是否會影響Emacs。 – 2012-02-25 13:20:22
變量Emacs使用而不是PATH
稱爲exec-path
(C-h v exec-path RET
爲文檔和狀態)。 exec-path
從PATH
或EMACSPATH
初始化。看起來你並沒有從你的zsh
上啓動Emacs,所以你的Emacs路徑並不完全匹配你的shell。
您可能會嘗試在您的.emacs
或中設置exec-path
,但您必須同時維護兩者。我沒有看到任何方式直接獲取你的shell配置,但也許你可以將你的路徑從它中排除。
編輯添加(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
。
太棒了,這在Linux下完美運行。 – 2014-10-24 16:46:47
FWIW,因爲我寫了這個答案,現在有一個[MELPA包](http://melpa.org/#/exec-path-from-shell)解決了這個問題,命名爲'exec-path-from-shell '。最好安裝該軟件包,而不是複製並粘貼此代碼段。除了正確維護外,它還允許從常規shell設置中複製其他環境變量,所以從Emacs啓動的任何子進程都將按預期工作。 – 2014-10-24 22:56:10
FWIW,這個問題並不是特定於Mac OS X,因爲它也會影響GNU/Linux系統,從GUI的菜單欄啓動Emacs通常會導致Emacs的啓動路徑不同於啓動的Emacs從命令行。這個問題可以追溯到第一個`xdm'Xsession腳本,雖然它們很容易修復(基本上使用Xsessionwrapper腳本執行「exec $ SHELL -c Xsession」,因此shell在運行用戶的Xsession之前運行),這裏我們在20年後面臨同樣的老問題。不知何故,我不希望gdm3解決這個問題;-(
雖然不是一個真正的答案,但它的傳聞價值很高。 – pmr 2012-02-25 14:06:16
它主要是固定在gdm2中,它可以獲得.profile和.xprofile,但是從我聽到的它在gdm3中再次被破壞。當檢測到zsh時,Kdm似乎做了一些瘋狂的事情,並開始通過zsh運行所有內容,而不使用兼容模式。 – Arrowmaster 2012-02-25 20:43:53
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>
您還可以在.zshenv
文件中指定PATH變量 - 爲子shell分配環境的首選約定。只要將zsh配置爲用戶的默認shell,emacs將源自您的.zshenv
,而不管emacs如何被調用。
你是指'shell-mode'或'eshell'中使用的'PATH'嗎? – pmr 2012-02-24 17:34:17