Emacs特定于shell的环境变量

时间:2014-09-19 00:31:40

标签: shell emacs windows-8 cygwin environment-variables

在Windows上的原生emacs中,我如何指定环境变量以在emacs中启动我的shell而不修改emacs'环境?在我的具体情况下,我想将HOME设置为zsh的cygwin特定值,而不修改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?),但对我而言不同寻常的部分是我所有的配置文件都是cygwin - ln - ed或windows - {{ 1}} - 编辑成git repo,cygwin和windows对符号链接采取截然不同的方法。

2 个答案:

答案 0 :(得分:2)

这是关于在Emacs中运行zsh作为shell(即关于从zsh shell启动Emacs),并且让劣质zsh进程看到的环境与Emacs有的环境?

如果是这样,您可以在启动进程时绑定 C-h v process-environment变量。 e.g:

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

答案 1 :(得分:0)

来自Emacs manual

  

Emacs将新shell发送文件~/.emacs_shellname的内容作为输入(如果存在),其中 shellname 是从中加载shell的文件的名称。例如,如果您使用bash,则发送给它的文件为~/.emacs_bash。如果找不到此文件,Emacs会尝试使用~/.emacs.d/init_shellname.sh

因此对于zsh,您可以将~/.emacs.d/init_zsh.sh放在内容中:

export HOME=/tmp