Как мне сказать оболочке, что она запускается из Emacs? - PullRequest
4 голосов
/ 20 августа 2011

У меня есть программа, которая использует коды терминала ANSI, чтобы делать причудливые вещи, такие как стирание строк, когда она работает в терминале.Когда он запускается из Emacs, он явно испортил буфер.

Программа имеет возможность не использовать их, поэтому я хотел бы иметь возможность включить эту опцию при запуске в оболочке внутриEmacs.

Я запускаю эту программу как часть Makefile, либо из терминала, либо используя режим компиляции в Emacs.

Так есть ли способ, чтобы режим компиляции устанавливал средупеременная (или что-то подобное), которую было бы легко перехватить в Makefile, чтобы использовать эту опцию, когда это уместно?

Вручную добавить дополнительный аргумент для make в команде make (в любом из случаев) - вот чтопытаюсь избежать.

Ответы [ 2 ]

4 голосов
/ 20 августа 2011

EMACS устанавливает переменную окружения $EMACS в сеансах M-x shell, поэтому вам нужно просто проверить это (при условии, что вы случайно не определили EMACS в других местах ваших сценариев оболочки):

# from login shell
echo $EMACS

# within Emacs shell
bash-4.2$ echo $EMACS
t
3 голосов
/ 20 августа 2011

Emacs также установит переменную окружения $ INSIDE_EMACS.Это может быть полезно для вас, если вам нужно знать не только, выполняете ли вы сеанс оболочки внутри emacs, но и какую версию emacs вы используете и как вы запускаете сеанс оболочки (что полезно знать, если вы 'использование в ваших скриптах управляющих символов ansi).Вот что я получаю, когда нахожусь в оболочке bash в Emacs (используя 'shell'):

~ $ echo $INSIDE_EMACS
24.0.50.3,comint
~ $ 

Вот то же самое, когда я нахожусь в оболочке Bourne в Emacs (используя 'ansi-term'):

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

Вот что я получаю, когда делаю то же самое с терминала (не в Emacs):

~ $ echo $INSIDE_EMACS

~ $ 
...