【问题标题】:Emacs shell-specific environment variablesEmacs shell 特定的环境变量
【发布时间】:2014-11-13 11:54:34
【问题描述】:

在 windows 上的原生 emacs 中,如何在不修改 emacs 环境的情况下指定环境变量以在 emacs 中启动我的 shell?在我的具体情况下,我想将 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-mklink-ed 到 git repo 和 cygwin 以及 windows 对符号链接采用非常不同且不兼容的方法。

【问题讨论】:

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


    【解决方案1】:

    来自Emacs manual

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

    所以对于zsh,您可以在~/.emacs.d/init_zsh.sh 中输入类似:

    export HOME=/tmp
    

    【讨论】:

      【解决方案2】:

      这是关于在 Emacs 中将 zsh 作为 shell 运行(即,不是关于从 zsh shell 启动 Emacs),并且让低级 zsh 进程看到的环境不同于Emacs 有吗?

      如果是这样,您可以在启动进程时绑定 C-hv process-environment 变量。例如:

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

      【讨论】:

      • 这很好,但是有没有办法自动将它应用到shell-command 和 M-x shell
      • 你关心的只是shell进程吗?如果您希望它影响您从 Emacs 调用的 每个 进程,那么您可以直接修改变量,而不是让绑定它。那么你就不需要做任何其他事情了。
      • 我想我在这里进入了一个奇怪的地方。我只需要接受这一点,直到我找到比拥有特定于 cygwin 的主目录更好的东西,我将不得不处理一些不一致的地方。我将尝试只修改变量,看看我遇到了什么样的问题。
      • 嗯,我遇到的第一件坏事是所有的书签功能都试图在新的 HOME 目录中打开 .emacs.d。除非有办法只影响“shell”函数,否则将不得不恢复编写 cygwin-shell 函数。
      猜你喜欢
      • 1970-01-01
      • 2013-01-20
      • 2018-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多