GitHub - purcell/inheritenv: Make emacs temp buffers inherit buffer-local environment variables (original) (raw)
Make Emacs temp buffers inherit buffer-local environment variables
Environment variables in Emacs can be set buffer-locally, like many Emacs preferences, and this allows users to have different buffer-local paths for executables in different projects, specified by a.dir-locals.el file or via a direnv integration likeenvrc.
However, there's a fairly common pitfall when Emacs libraries run background processes on behalf of a user: many such libraries run processes in temporary buffers that do not inherit the calling buffer's environment if it is set buffer-locally. This can result in executables not being found, or the wrong versions of executables being picked up.
An example is the Emacs built-in commandshell-command-to-string. Whatever buffer-local process-environment(or exec-path) the user has set, that command will always use the Emacs-wide default. This is specified behaviour, but not _expected_or helpful.
inheritenv provides a couple of tools for dealing with this issue:
- Library authors can wrap code that plans to execute processes in temporary buffers with the
inheritenvmacro. - Users can modify commands like
shell-command-to-stringusing theinheritenv-add-advicemacro.
Installation
Manual
Ensure inheritenv.el is in a directory on your load-path, and add the following to your ~/.emacs or ~/.emacs.d/init.el:
MELPA
If you're an Emacs 24 user or you have a recent version ofpackage.el you can install inheritenv from theMELPA repository. The version ofinheritenv there will always be up-to-date.
About
Author: Steve Purcell
Homepage: https://github.com/purcell/inheritenv