Package: guix-patches;
Reported by: Janneke Nieuwenhuizen <janneke <at> gnu.org>
Date: Wed, 22 Jan 2025 08:32:02 UTC
Severity: normal
Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):
From: Janneke Nieuwenhuizen <janneke <at> gnu.org> To: guix-patches <at> gnu.org Cc: ludo <at> gnu.org Subject: [emacs-guix] elisp: Change guix-set-emacs-environment to use local variables. Date: Wed, 22 Jan 2025 09:30:58 +0100
This changes the semantics of "guix-set-emacs-environment" and that's probably what one would expect. Keeping old functionality as "guix-set-emacs-environment-global". * elisp/guix-misc.el (guix-set-emacs-environment): Rename to...: (guix-set-emacs-environment-global): ...this. (guix-set-emacs-environment): New procedure setting a buffer-local environment. * doc/emacs-guix.texi (Miscellaneous Commands): Update accordingly. Add hint about "emacs-envrc". --- doc/emacs-guix.texi | 17 +++++++++++++---- elisp/guix-misc.el | 33 ++++++++++++++++++++++++++++++--- 2 files changed, 43 insertions(+), 7 deletions(-) diff --git a/doc/emacs-guix.texi b/doc/emacs-guix.texi index 3219354..d073cb8 100644 --- a/doc/emacs-guix.texi +++ b/doc/emacs-guix.texi @@ -11,6 +11,7 @@ This document describes Emacs-Guix, the Emacs interface for the @quotation Copyright @copyright{} 2014-2019, 2021 Alex Kost@* Copyright @copyright{} 2018 Oleg Pykhalov +Copyright @copyright{} 2018, 2025 Janneke Nieuwenhuizen Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 @@ -1764,10 +1765,18 @@ Open a mail buffer to report a bug for GNU Guix similarly to @kbd{M-x <at> tie{}report-emacs-bug} command. @findex guix-set-emacs-environment -@item M-x guix-set-emacs-environment -Set current Emacs environment according to a specified profile. Note -that there is no way to restore the original environment (you have to -restart Emacs if you wish to do it). +@item M-x guix-set-emacs-environment-global +Buffer-locally set Emacs environment according to a specified profile. +Note that there is no way to restore the original environment for this +buffer (you have to kill the buffer and re-create it if you wish to do +it). If you find yourself using this command often, you may want to +look at the @file{emacs-envrc} package. + +@findex guix-set-emacs-environment-global +@item M-x guix-set-emacs-environment-global +Globalally set current Emacs environment according to a specified +profile. Note that there is no way to restore the original +environment (you have to restart Emacs if you wish to do it). @findex guix-pull @item M-x guix-pull diff --git a/elisp/guix-misc.el b/elisp/guix-misc.el index f4a7aaa..0cc0dfc 100644 --- a/elisp/guix-misc.el +++ b/elisp/guix-misc.el @@ -1,7 +1,7 @@ ;;; guix-misc.el --- Miscellaneous definitions -*- lexical-binding: t -*- ;; Copyright © 2014–2018 Alex Kost <alezost <at> gmail.com> -;; Copyright © 2018, 2020, 2023 Janneke Nieuwenhuizen <janneke <at> gnu.org> +;; Copyright © 2018, 2020, 2023, 2025 Janneke Nieuwenhuizen <janneke <at> gnu.org> ;; This file is part of Emacs-Guix. @@ -223,8 +223,8 @@ FILE. With a prefix argument, also prompt for PROFILE." (guix-display-buffer guix-search-paths-buffer-name))) ;;;###autoload -(defun guix-set-emacs-environment (&optional profile) - "Set Emacs environment to match PROFILE. +(defun guix-set-emacs-environment-global (&optional profile) + "Set global Emacs environment to match PROFILE. PROFILE can be a named profile (like '~/.guix-profile', '~/.config/guix/work') or a direct link to profile from the store, like GUIX_ENVIRONMENT variable (see Info node `(guix) @@ -248,6 +248,33 @@ If PROFILE is nil, use `guix-current-profile'." (when (equal variable "INFOPATH") (setq Info-directory-list (split-string value ":"))))))) +;;;###autoload +(defun guix-set-emacs-environment (&optional profile) + "Set Emacs environment to match PROFILE. +PROFILE can be a named profile (like '~/.guix-profile', +'~/.config/guix/work') or a direct link to profile from the +store, like GUIX_ENVIRONMENT variable (see Info node `(guix) +Invoking guix environment' for details). + +If PROFILE is nil, use `guix-current-profile'." + (interactive (list (guix-read-profile))) + (let ((specs (guix-eval-read + (guix-make-guile-expression + 'search-paths-specifications + (guix-file-name profile))))) + (dolist (spec specs) + (-let* (((variable separator path) spec) + (current-value (getenv variable)) + (value (if (and separator current-value) + (concat path separator current-value) + path))) + (setq-local process-environment + (cons (concat variable "=" value) process-environment)) + (when (equal variable "PATH") + (setq-local exec-path (split-string value ":"))) + (when (equal variable "INFOPATH") + (setq-local Info-directory-list (split-string value ":"))))))) + ;;; Executing guix commands -- 2.46.0
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.