Edited добавить (2014): Существует теперь package in MELPA имени exec-path-from-shell
, который решает эту проблему точно. (См. Также Github repository). Почти наверняка лучше установить этот пакет, а не копировать и вставлять этот фрагмент. Помимо правильной поддержки, он также поддерживает копирование других переменных среды из вашей оболочки, поэтому любые подпроцессы, запущенные с Emacs, будут работать, как ожидалось.
Оригинальный ответ: Вот мой обходной путь для этой проблемы, которая не требует всегда начиная Emacs из оболочки (я также обеспокоены этим иногда на мой макинтош):
(let ((path (shell-command-to-string ". ~/.zshrc; echo -n $PATH")))
(setenv "PATH" path)
(setq exec-path
(append
(split-string-and-unquote path ":")
exec-path)))
Он устанавливает идею Emacs о переменной среды PATH
(так что она будет наследоваться подоболочками) и переменной Lisp exec-path
, которая используется для поиска исполняемых файлов из кода Lisp и для некоторых целей автозавершения. Вам также может потребоваться проверить, что shell-file-name
настроен на расположение вашего двоичного кода zsh
вместо стандартного /bin/bash
.
Вы имеете в виду 'PATH', который используется в' shell-mode' или 'eshell'? – pmr