this package provides direnv integration for emacs.
it works by invoking
direnv to obtain the environment
for the current file,
then updating the emacs variables
the result is that
programs started from within emacs,
such as inferior shells, linters, compilers, and test runners,
will be looked up in the correct
and will be started
with the correct environment variables set.
M-x package-install RET direnv RET
alternatively, put the elisp file somewhere in the loading path and load it explicitly:
also make sure
that the direnv version (
is at least 2.8.0
since this package uses
the json export capabilities (
direnv export json).
provides the core functionality of this package:
it updates the emacs environment
to the direnv environment for the current file.
the minibuffer will show a message
with a summary of the changes made to the environment,
similar to what
direnv does in a shell.
the global minor mode
direnv-mode does the same,
but automatically updates the emacs environment
when the active buffer changes,
so that the environment always matches the current file.
to automatically enable this behaviour when emacs starts,
put this in your
or use the
(use-package direnv :config (direnv-mode))
direnv edit from a shell:
it edits the
associated with the current directory
or one of its parent directories.
this packages offers various configuration settings.
these settings can be set in a
(setq), or via the customize interface:
M-x customize-group RET direnv RET
the available settings are outlined below.
direnv-modeautomatically changes the environment, a summary message will be shown in the minibuffer. summary messages of automatic changes can be suppressed by setting
nil. interactive calls, e.g.
direnv-update-environment, will still show a summary message.
the summary message contains the paths of the old and new directories, which may be a bit too verbose for your taste. the
direnv-show-paths-in-summaryvariable controls whether the summary includes path names. to get shorter summary messages, use
the summary message uses different font faces for added, changed, and removed environment variables. depending on your theme, this usually results in different colours. this behaviour can be disabled by setting
this is a list of modes where direnv will update even if the buffer has no file. examples include shells and interactive compilation (
comint) buffers. example usage (with
(use-package foobar :config (add-to-list 'direnv-non-file-modes 'foobar-mode))
if you experience problems,
first check the hidden buffer named
(with a leading space before the name).
this buffer contains
the output of the last
which will likely contain more information
about the source of the problem.
this buffer will be automatically shown
direnv exits with a non-zero status code,
but for non-fatal problems
such as incorrect
you may have to open this buffer manually for inspection.
if you use
direnv-mode and an error occurs,
emacs will automatically disable the hook
after fixing the problem,
to ensure the problem is solved,
praise? complaints? bugs? questions? ideas?
please use the github issue tracker.
this emacs package was created by wouter bolsterlee (@wbolster).
- 1.5.0 (…)
- handle indirect buffers correctly; see #25
- 1.4.0 (2018-03-01)
- smarter default behaviour of summary messages on environment change; see #23
- 1.3.0 (2018-02-13)
- improved operation with non-file modes,
such as shells and compilation buffers.
- improved operation with non-file modes, such as shells and compilation buffers. see
- 1.2.1 (2017-06-22)
direnv-modeno longer fails when opening a file in a directory that does not (yet) exist.
- 1.2.0 (2017-05-01)
- summary message now uses custom font faces (colours!)
- improved error handling
- 1.1.0 (2017-03-09)
- implemented summary message after updating environment, and configuration variables to tweak how it works.
- expanded docs
- 1.0.1 (2017-03-08)
- initial release with basic functionality
(this is the osi approved 3-clause "new bsd license".)
copyright 2017 wouter bolsterlee
all rights reserved.
redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
- redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
- redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
- neither the name of the author nor the names of the contributors may be used to endorse or promote products derived from this software without specific prior written permission.
this software is provided by the copyright holders and contributors "as is" and any express or implied warranties, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose are disclaimed. in no event shall the copyright holder or contributors be liable for any direct, indirect, incidental, special, exemplary, or consequential damages (including, but not limited to, procurement of substitute goods or services; loss of use, data, or profits; or business interruption) however caused and on any theory of liability, whether in contract, strict liability, or tort (including negligence or otherwise) arising in any way out of the use of this software, even if advised of the possibility of such damage.