I use Emacs for most of my development work. When I’m not SSHed into a remote machine I generally stick with the GUI Emacs. On OS X this has the downside of not inheriting environment variables from your shell.
I could work around this by using
setenv, but that would require me to duplicate the values of those variables. Thankfully there is a better solution:
(defun set-exec-path-from-shell-PATH ()
(let ((path-from-shell (shell-command-to-string "$SHELL -i -c 'echo $PATH'")))
(setenv "PATH" path-from-shell)
(setq exec-path (split-string path-from-shell path-separator))))
This will invoke the shell to get the value of
$PATH and then use
setenv to set it. Then all you need to do is add
(if window-system (set-exec-path-from-shell-PATH)) to your Emacs configuration.
There is nothing special about
$PATH in this regard. You could easily extend this function to set other environment variables as needed.
I originally found this code on the Clojure mailing list.