2011-08-20 2 views
4

나는 ansi 터미널 코드를 사용하여 터미널에서 실행될 때 줄 지우기 같은 멋진 작업을 수행하는 프로그램을 가지고 있습니다. Emacs 내에서 실행될 때, 분명히 버퍼를 망가 뜨립니다.Emacs 내에서 쉘이 실행 중임을 어떻게 알 수 있습니까?

프로그램에서이 옵션을 사용하지 않기 때문에 Emacs에서 쉘을 실행할 때이 옵션을 켜기를 원할 수 있습니다.

이 프로그램은 터미널에서 또는 Emacs에서 컴파일 모드를 사용하여 Makefile의 일부로 실행합니다.

그래서 적절한 경우 옵션을 사용하기 위해 Makefile에서 쉽게 catch 할 수있는 환경 변수 (또는 비슷한)를 컴파일 모드에서 설정하는 방법이 있습니까?

make 명령에 make 인수에 수동으로 추가 인수를 수동으로 추가하면 (피할 경우) 피하려고합니다.

답변

4

EMACS는 M-x shell 세션 내에서 $EMACS 환경 변수를 설정, 그래서 당신은 (실수로 쉘 스크립트에서 다른 곳 EMACS를 정의하지 않습니다 당신을 가정)가 확인해야합니다 :

# from login shell 
echo $EMACS 

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

완벽! 정확히 내가 원했던 것이지만 찾기가 어렵습니다. – thoni56

+3

나는 emacs에서 돌아가는 쉘에서'env'의 출력을보고 한 번 알아 냈습니다. – sanityinc

+2

Foo Bah : 당신은 "eshell"이라고 말하지만 실제로 그렇게 생각하지 않습니까? 실험적으로'M-x eshell'은'EMACS' 환경 변수를 설정하지 않습니다. 또한'eshell'으로 "bash"쉘 프롬프트를 보지 않을 것입니다. 그 환경 변수는 Emacs에서 시작된 다른 쉘 (''M-x shell'과'M-x term '또는'ansi-term')에 대해 나타나는 것처럼 보입니다. – phils

3

이맥스 설정합니다 $ INSIDE_EMACS 환경 변수도 마찬가지입니다. emacs에서 쉘 세션을 사용하고 있는지, 사용하고있는 이맥스의 버전과 쉘 세션을 어떻게 운영하고 있는지를 알아야 할 필요가있을 때 유용 할 수 있습니다. 스크립트에서 ANSI 제어 문자 사용). 여기에 ('쉘'를 사용) 내가 이맥스에서 bash 쉘에있을 때 내가 무엇을 얻을 : 나는 ('ANSI-용어'를 사용) 이맥스의 Bourne 쉘에있을 때

~ $ echo $INSIDE_EMACS 
24.0.50.3,comint 
~ $ 

여기에 동일합니다 :

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

는 여기에 내가 무엇을 얻을 내가 (안 이맥스에서) 터미널에서 동일한 작업을 수행 할 때

~ $ echo $INSIDE_EMACS 

~ $ 
+0

내 xemacs에서 보지 못합니다. – beluchin

관련 문제