help-guix
[Top][All Lists]
Advanced

[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)

Hello!

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:
https://lists.gnu.org/archive/html/guix-devel/2017-05/msg00475.html.

I hope this helps!

Maxim



reply via email to

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