emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Buffer-local process environments


From: Stefan Monnier
Subject: Re: Buffer-local process environments
Date: Thu, 29 Apr 2021 10:02:50 -0400
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux)

> So why not make buffer-local process environments an official thing?

Sounds fine to me.

To fix cases like `compile` or `run-python`, I think patches would be
welcome regardless of what is decided in this discussion: those
behaviors look like plain bugs to me.

> # Local Variables:
> # path: "~/path/to/some/virtualenv/bin"
> # env: "VIRTUAL_ENV=$HOME/path/to/some/virtualenv"
> # env: "LANG=C"
> # End:

A few comments:
- I don't much like "special local vars" (like `eval` and `mode`), so if
  we can find a more general solution (i.e. one that can be useful for
  other settings), that would be better.  Maybe

    # push exec-path: "~/path/to/some/virtualenv/bin"

- both `exec-path` and `process-environment` are "dangerous" variables,
  so encouraging such uses sounds rather risky.

- I'd write `path` above as `exec-path` or `PATH`, or even `$PATH`,
  otherwise it's unclear which "path" is meant.

> --- a/lisp/progmodes/compile.el
> +++ b/lisp/progmodes/compile.el
> @@ -1779,6 +1779,8 @@ compilation-start
>           (replace-regexp-in-string "-mode\\'" "" (symbol-name mode))))
>        (thisdir default-directory)
>        (thisenv compilation-environment)
> +         (this-process-environment process-environment)
> +         (env-buffer (when (local-variable-p 'process-environment) 
> (buffer-name)))
>        outwin outbuf)
>      (with-current-buffer
>       (setq outbuf
> @@ -1856,6 +1858,9 @@ compilation-start
>               "; default-directory: "
>                  (prin1-to-string (abbreviate-file-name default-directory))
>               " -*-\n"
> +                (if env-buffer
> +                    (format "Process environment is local to buffer `%s'\n" 
> env-buffer)
> +                  "")
>               (format "%s started at %s\n\n"
>                       mode-name
>                       (substring (current-time-string) 0 19))
> @@ -1875,7 +1880,7 @@ compilation-start
>                (and (derived-mode-p 'comint-mode)
>                     (comint-term-environment))
>             (list (format "INSIDE_EMACS=%s,compile" emacs-version))
> -           (copy-sequence process-environment))))
> +           (copy-sequence this-process-environment))))
>          (setq-local compilation-arguments
>                      (list command mode name-function highlight-regexp))
>          (setq-local revert-buffer-function 'compilation-revert-buffer)

Does this work correctly when you `M-x recompile`?


        Stefan




reply via email to

[Prev in Thread] Current Thread [Next in Thread]