Emacs特定于shell的环境变量

问题描述:

在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对于符号链接采用了非常不同且不兼容的方法。

这是有关运行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

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