我有一个程序,它使用ansi终端代码做一些奇特的东西,如在终端中运行时擦除行。当它从Emacs中运行时,它显然会搞砸缓冲区。
该程序有一个不使用它的选项,所以我希望能够在Emacs中的shell中运行时打开该选项。
我作为Makefile的一部分执行该程序,可以从终端执行,也可以在Emacs中使用编译模式。
那么有没有办法让编译模式设置一个环境变量(或类似的东西),在Makefile中很容易捕获,以便在适当的时候使用该选项?
在make命令中手动添加额外的参数(在任何一种情况下)都是我想要避免的。
答案 0 :(得分:4)
EMACS在$EMACS
个会话中设置M-x shell
环境变量,因此您应该检查一下(假设您不会在shell脚本中的其他地方无意中定义EMACS
):
# from login shell
echo $EMACS
# within Emacs shell
bash-4.2$ echo $EMACS
t
答案 1 :(得分:3)
Emacs也会设置$ INSIDE_EMACS环境变量。如果您不仅需要知道是否在emacs中运行shell会话,而且还知道您正在使用哪个版本的emacs以及如何运行shell会话(这对于了解您是否有用),这对您非常有用。在脚本中使用ansi控制字符)。这是我在Emacs中使用bash shell时所获得的(使用'shell'):
~ $ echo $INSIDE_EMACS
24.0.50.3,comint
~ $
当我在Emacs中使用Bourne shell时(使用'ansi-term'),这是相同的:
sh-3.2$ echo $INSIDE_EMACS
24.0.50.3,term:0.96
sh-3.2$
这是我从终端(不是在Emacs中)做同样的事情时得到的:
~ $ echo $INSIDE_EMACS
~ $