tho*_*i56 4 emacs environment-variables
我有一个程序使用ansi终端代码来执行一些花哨的工作,例如在终端中运行时擦除行。当从Emacs内部运行时,显然会弄乱缓冲区。
该程序有一个不使用这些选项的选项,因此我希望能够在Emacs中的shell中运行时打开该选项。
我从终端或在Emacs中使用编译模式将此程序作为Makefile的一部分执行。
那么,有没有一种方法可以让编译模式设置一个环境变量(或类似的变量),以便在合适的情况下很容易在Makefile中捕获它以使用该选项?
我试图避免在make命令中手动添加一个额外的参数(无论哪种情况)。
Emacs 也会设置 $INSIDE_EMACS 环境变量。如果您不仅需要知道您是否在 emacs 中运行 shell 会话,而且需要知道您使用的是哪个版本的 emacs 以及您如何运行 shell 会话(这对于知道您是否“有用”),这对您很有用在脚本中重新使用 ansi 控制字符)。这是我在 Emacs 中的 bash shell 中得到的结果(使用“shell”):
~ $ echo $INSIDE_EMACS
24.0.50.3,comint
~ $
Run Code Online (Sandbox Code Playgroud)
当我在 Emacs 中的 Bourne shell 中时也是如此(使用“ansi-term”):
sh-3.2$ echo $INSIDE_EMACS
24.0.50.3,term:0.96
sh-3.2$
Run Code Online (Sandbox Code Playgroud)
这是我从终端(不是在 Emacs 中)执行相同操作时得到的结果:
~ $ echo $INSIDE_EMACS
~ $
Run Code Online (Sandbox Code Playgroud)
EMACS $EMACS在M-x shell会话中设置环境变量,因此您只需要检查一下即可(假设您不会无意间EMACS在shell脚本中的其他地方定义):
# from login shell
echo $EMACS
# within Emacs shell
bash-4.2$ echo $EMACS
t
Run Code Online (Sandbox Code Playgroud)