2014-09-19 3 views
0

В собственных emacs на окнах, как я могу указать переменные среды для запуска моей оболочки внутри emacs без изменения среды emacs? В моем конкретном случае я хотел бы установить HOME на значение cygwin для zsh без изменения, где emacs считает, что этот файл конфигурации живет.Переменные среды среды, связанные с оболочкой Emacs

Я пробовал некоторые вещи, такие как изменение моей оболочки на env -u HOME ...\zsh.exe, но это, кажется, прерывает (shell-command) (он, казалось, включал порядок аргументов).

Если существовала эта команда, то, вероятно, делать то, что я хочу:

(setq explicit-zsh-environment '("HOME" nil)) 

Я прочитал кучу вопросов, связанных как (How can I run Cygwin Bash Shell from within Emacs?), но необычная часть для меня является то, что все мои конфигурационные файлы являются cygwin-ln -ed или windows- mklink -ed в git repo, а cygwin и окна используют очень разные и несовместимые подходы к символическим ссылкам.

ответ

2

ли это о запуске zsh в качестве оболочки внутри Emacs (т.е. не о запуске Emacs из оболочки ЗШ), и имеющий на окружающую среду, что процесс уступает ЗШ видит, будет отличаться от окружающей среды, что Emacs имеет?

Если да, то можно привязать С-Н переменнойvprocess-environment при запуске процесса. например:

(let ((process-environment '("HOME=/tmp"))) 
    (call-interactively 'shell)) 
$ echo $HOME 
/tmp 
+0

Это хорошо, но есть способ, чтобы автоматически применить его к 'раковине-command' и М-х' shell'? – kleinpa

+0

Являются ли это просто процессами оболочки, о которых вы беспокоитесь? Если вы хотите, чтобы это повлияло на * каждый * процесс, который вы вызываете из Emacs, тогда вы можете просто изменить переменную напрямую, а не связывать ее. Тогда вам не нужно будет ничего делать. – phils

+0

Думаю, я попадаю в странное место здесь. Мне просто нужно принять это, пока я не найду что-то лучше, чем наличие домашнего каталога, связанного с cygwin, мне придется иметь дело с несколькими несоответствиями. Я попытаюсь просто изменить переменную и посмотреть, с какими проблемами сталкиваюсь. – kleinpa

0

От Emacs manual:

Emacs отправляет новую оболочку содержимое файла ~/.emacs_shellname в качестве входных данных, если она существует, где shellname это имя файла что оболочка была загружена из. Например, если вы используете bash, файл, отправленный ему, - ~/.emacs_bash. Если этот файл не найден, Emacs пытается с ~/.emacs.d/init_shellname.sh.

Так zsh вы бы положить внутрь ~/.emacs.d/init_zsh.sh что-то вроде:

export HOME=/tmp