2011-08-20 83 views
4

我有一個程序,它使用ansi終端代碼來做花式的東西,比如在終端中運行時擦除線。當它從Emacs中運行時,它顯然會將緩衝區擰緊。如何告訴shell從Emacs中運行它?

該程序有一個選項,不使用這些,所以我希望能夠在Emacs內的shell中運行時打開該選項。

我從終端或在Emacs中使用編譯模式執行該程序作爲Makefile的一部分。

那麼有沒有一種方法可以讓編譯模式設置一個環境變量(或類似的東西),以便在Makefile中很容易捕捉到適當時使用該選項?

手動添加一個額外的參數使make-command(在任何一種情況下)是我想要避免的。

回答

4

EMACS設置M-x shell會話中的$EMACS環境變量,所以你只要檢查該(假設你的shell腳本中不小心定義EMACS其他地方):

# from login shell 
echo $EMACS 

# within Emacs shell 
bash-4.2$ echo $EMACS 
t 
+0

完美!正是我期望的,但很難找到。 – thoni56

+3

我想通過在emacs下運行的shell中查看'env'的輸出來解決這個問題。 – sanityinc

+2

Foo Bah:你說「eshell」,但我不認爲你的意思是?實驗'M-x eshell'確實*不*設置'EMACS'環境變量,並且你也不會看到帶'eshell'的「bash」shell提示符。然而,這個環境變量對於從Emacs開始的其他shell來說確實存在('M-x shell'和'M-x term'或'ansi-term')。 – phils

3

Emacs會設置$ INSIDE_EMACS環境變量也是如此。如果您不僅需要了解是否在emacs中運行shell會話,而且還需要知道您使用的是哪個版本的emacs以及如何運行shell會話(這對於瞭解您是否使用emacs有用,在腳本中使用ansi控制字符)。下面是我得到的,當我在Emacs的是bash shell是(使用「外殼」):

~ $ echo $INSIDE_EMACS 
24.0.50.3,comint 
~ $ 

這是同樣的,當我在一個Bourne shell在Emacs(使用「ANSI-術語」):

sh-3.2$ echo $INSIDE_EMACS 
24.0.50.3,term:0.96 
sh-3.2$ 

這裏就是我得到的,當我做同樣的從終端(未在Emacs):

~ $ echo $INSIDE_EMACS 

~ $ 
+0

我在我的xemacs中沒有看到。 – beluchin

相關問題