[Top][All Lists]

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

Re: Guix and Emacs Integration for Polyglot Development

From: Maxim Cournoyer
Subject: Re: Guix and Emacs Integration for Polyglot Development
Date: Fri, 31 Aug 2018 08:49:03 -0400
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/26.1 (gnu/linux)


I'm reposting Janneke's recent answer here so that it can have all its
context and participants.

Jan Nieuwenhuizen <address@hidden> writes:

> Hi!
> Just subscribed to help-guix because of a request on IRC, so hoping that
> OP is subscribed here, or someone can notify them.
> I have an ugly hack to switch emacs to a profile or environment.  It
> parses the <profile>/etc/profile script...using MANIFEST or
> `--search-paths' would be much nicer...
> Anyway, I'm using some named profiles, eg
>     ~/.config/guix/mes
> and when starting work on mes i do
>     M-x guix-switch-profile RET ~/.config/guix/mes RET
> similar for other projects I work on.
> A real solution would be nice...
> HTH, janneke
> --8<---------------cut here---------------start------------->8---
> (defun guix-switch-profile (&optional profile)
>   "reset Emacs' environment by snarfing PROFILE/etc/profile"
>   (defun matches-in-string (regexp string)
>     "return a list of matches of REGEXP in STRING."
>     (let ((matches))
>       (save-match-data
>         (string-match "^" "")
>         (while (string-match regexp string (match-end 0))
>           (push (or (match-string 1 string) (match-string 0 string)) 
> matches)))
>       matches))
>   (interactive "fprofile: ")
>   (let* ((output (shell-command-to-string (concat "GUIX_PROFILE= /bin/sh -x " 
> profile "/etc/profile")))
>          (exports (matches-in-string "^[+] export \\(.*\\)" output)))
>     (mapcar (lambda (line) (apply #'setenv (split-string line "="))) exports 
> )))
> --8<---------------cut here---------------end--------------->8---

Thank you, Janneke!

An alternative if you'd like to also define some variables (say,
PYTHONPATH to add a couple of sources libraries while working on a
Python project) would be to use `direnv'[0] and `emacs-direnv'.

Christopher Baines detailed the solution in this thread:

I hope this helps!


reply via email to

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