2014-09-19 163 views
0

在Windows上的本機emacs中,如何指定環境變量以便在不修改emacs環境的情況下在emacs中啓動我的shell?在我的具體情況下,我想將HOME設置爲zsh的cygwin特定值,而不修改emacs認爲其配置文件所在的位置。Emacs特定於shell的環境變量

我試過一些東西,比如改變我的外殼到env -u HOME ...\zsh.exe,但是這似乎打破(shell-command)(它似乎涉及參數順序)。

如果此命令的存在,它可能會做我想做的:

(setq explicit-zsh-environment '("HOME" nil)) 

我讀過像(How can I run Cygwin Bash Shell from within Emacs?)一堆相關的問題,但對我來說不同尋常的是,我所有的配置文件將它們轉換爲git repo,而cygwin和windows對於符號鏈接採用了非常不同且不兼容的方法。

回答

2

這是有關運行zsh作爲在Emacs的殼(即有關從外殼的zsh啓動Emacs),以及具有該環境下的zsh過程認爲是到Emacs有環境不同?

如果是這樣,你可以在C-Hvprocess-environment變量綁定,當你啓動一個進程。例如:

(let ((process-environment '("HOME=/tmp"))) 
    (call-interactively 'shell)) 
$ echo $HOME 
/tmp 
+0

這是好事,但有將自動適用於'殼command'和M-X的方式'shell'? – kleinpa 2014-09-19 02:35:11

+0

它只是你關心的shell進程嗎?如果你想讓它影響你從Emacs調用的每一個進程,那麼你可以直接修改這個變量,而不是讓它綁定它。那你就不需要做其他事情了。 – phils 2014-09-19 03:56:22

+0

我想我在這裏變成了一個奇怪的地方。我只需要接受,直到我找到比擁有cygwin特定主目錄更好的東西,我將不得不處理一些不一致的問題。我會試着修改變量,看看遇到了什麼樣的問題。 – kleinpa 2014-09-19 04:20:16

0

Emacs manual

的Emacs發送新的外殼文件~/.emacs_shellname的內容作爲輸入,如果存在的話,其中shellname是文件名該shell是從哪裏加載的。例如,如果使用bash,發送給它的文件是~/.emacs_bash。如果找不到這個文件,Emacs會嘗試~/.emacs.d/init_shellname.sh

所以對於zsh你把裏面的~/.emacs.d/init_zsh.sh類似:

export HOME=/tmp