unofficial mirror of guix-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Maxim Cournoyer <maxim.cournoyer@gmail.com>
To: "Miguel Ángel Arruga Vivas" <rosen644835@gmail.com>
Cc: guix-devel@gnu.org
Subject: Re: [PATCH] .dir-locals.el: Automatically set the GEISER-GUILE-LOAD-PATH variable.
Date: Mon, 26 Oct 2020 01:47:04 -0400	[thread overview]
Message-ID: <87d015y1wn.fsf@gmail.com> (raw)
In-Reply-To: <87o8kqowa5.fsf@gmail.com> ("Miguel Ángel Arruga Vivas"'s message of "Sun, 25 Oct 2020 22:01:05 +0100")

Hello Miguel!

Miguel Ángel Arruga Vivas <rosen644835@gmail.com> writes:

> Hi!
>
> I think that geiser should use something (project.el, wink wink) to fill
> load-path automatically when that's possible.  Nevertheless, I have some
> comments for this.
>
> Maxim Cournoyer <maxim.cournoyer@gmail.com> writes:
>> +
>> +     ;; Emacs-Guix
>> +     (eval . (setq guix-directory
>> +                   (locate-dominating-file default-directory ".dir-locals.el")))
>> +
>> +     ;; Geiser
>> +     ;; This allows automatically setting the `geiser-guile-load-path'
>> +     ;; variable when using various Guix checkouts (e.g., via git worktrees).
>> +     ;; The checkout root directory name should be prefixed by "guix" for it
>> +     ;; to work correctly.
>> +     (eval . (let* ((root-dir (expand-file-name
>> +                               (locate-dominating-file
>> +                                default-directory ".dir-locals.el")))
>> +                    ;; Workaround for bug https://issues.guix.gnu.org/43818.
>> +                    (root-dir* (if (string-suffix-p "/" root-dir)
>> +                                   (substring root-dir 0 -1)
>> +                                 root-dir))
>
> This is already implemented by directory-file-name.

Neat!

>> +                    (clean-geiser-guile-load-path
>> +                     (seq-remove (lambda (x)
>> +                                   (string-match "/guix" x))
>> +                                 geiser-guile-load-path)))
>
> This fails if geiser-guile-load-path does not exist (void-variable).
> The cleanup removes other guixes, isn't it?  I suggest making the
> variable buffer-local and forget about hard-coded names. :-)

That's a good suggestion!  I toyed with it and it's a bit tricky but I
think the v2 patch I'll send as a follow-up does the trick.  My concern
was also supporting when a user has previously set
geiser-guile-load-path in their .emacs init file, e.g.:

--8<---------------cut here---------------start------------->8---
(setq geiser-guile-load-path (list (expand-file-name "~/src/guix")
                                   (expand-file-name "~/src/shepherd")))
--8<---------------cut here---------------end--------------->8---

That would mean their entries don't get cleaned up (it seems this
doesn't matter in my latest tests with the v2 patch though!).

>> + (setq geiser-guile-load-path + (cons root-dir*
>> clean-geiser-guile-load-path))))))
>
> This becomes a push with a local variable.  Like this:
>
> (eval . (setq guix-directory
>           (locate-dominating-file default-directory ".dir-locals.el")))
> (eval . (when (boundp 'geiser-guile-load-path)

This check makes it so that if geiser-guile-load-path is not already
defined, nothing happens.  It is likely that this is the case, as when
relying on just Geiser's autoloads, it is not loaded.  The user would
have to either set explicitly before hand or call (require
'geiser-guile), which we can't rely on.  But we can drop this check.

>           (make-local-variable 'geiser-guile-load-path) (push
>           (directory-file-name (expand-file-name
>           (locate-dominating-file default-directory
>           ".dir-locals.el"))) geiser-guile-load-path))

I ended up using `cl-pushnew' here instead of push, as otherwise
repeated entries were accumulated.

One thing that worried me was the %load-compiled-path not appearing in
the order defined from guile-geiser-load-path, but in my latest tests as
mentioned above it didn't matter.  Below, the %load-path and
%load-compiled-path variables with this patch, when
geiser-guile-load-path is predefined with '("/home/maxim/src/shepherd"
"/home/maxim/src/guix") from my .emacs file:

;; scheme@(guile-user)> %load-path
;; $2 = ("/home/maxim/src/guix-core-updates"
         "/gnu/store/...-emacs-geiser-0.12/share/geiser/guile/"
         "/home/maxim/src/guix"
         "/home/maxim/src/shepherd" 
         [...])
;; scheme@(guile-user)> %load-compiled-path
;; $3 = ("/home/maxim/src/shepherd"
         "/home/maxim/src/guix"
         "/home/maxim/src/guix-core-updates"
         [...])

Patch v2 incoming.

Thank you,

Maxim


  reply	other threads:[~2020-10-26  5:47 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-10-25 18:08 [PATCH] Automatically set `geiser-guile-load-path' from .dir-locals Maxim Cournoyer
2020-10-25 18:13 ` Pierre Neidhardt
2020-10-25 18:42 ` [PATCH] .dir-locals.el: Automatically set the GEISER-GUILE-LOAD-PATH variable Maxim Cournoyer
2020-10-25 18:52   ` Pierre Neidhardt
2020-10-25 21:37     ` Maxim Cournoyer
2020-10-25 21:01   ` Miguel Ángel Arruga Vivas
2020-10-26  5:47     ` Maxim Cournoyer [this message]
2020-10-26  5:53     ` [PATCH v2] " Maxim Cournoyer
2020-10-26  7:56       ` Pierre Neidhardt
2020-10-26 11:38       ` Miguel Ángel Arruga Vivas
2020-10-27 16:53         ` Maxim Cournoyer
2020-10-27 18:58           ` Miguel Ángel Arruga Vivas
2020-10-27 17:44         ` [PATCH v3] " Maxim Cournoyer
2020-10-31  4:19           ` Maxim Cournoyer
2020-11-01  1:02             ` Miguel Ángel Arruga Vivas
2020-10-26 13:43 ` [PATCH] Automatically set `geiser-guile-load-path' from .dir-locals zimoun
2020-10-26 15:03   ` Pierre Neidhardt
2020-11-05  2:20 ` Christopher Lemmer Webber
2020-11-05  4:00   ` Christopher Lemmer Webber
2020-11-05  9:25     ` Miguel Ángel Arruga Vivas
2020-11-05 17:26       ` Christopher Lemmer Webber
2020-11-14 19:57       ` Christopher Lemmer Webber
2020-11-16  4:18         ` Maxim Cournoyer
2020-11-16 14:54           ` Miguel Ángel Arruga Vivas
2020-11-16 17:41             ` Christopher Lemmer Webber
2020-11-16 18:07               ` Christopher Lemmer Webber
2020-11-16 20:57                 ` Miguel Ángel Arruga Vivas
2020-11-16 23:09                   ` Christopher Lemmer Webber
2020-11-17 15:36                   ` Maxim Cournoyer
2020-11-18 10:12                     ` Miguel Ángel Arruga Vivas
2020-11-05 14:21   ` Maxim Cournoyer

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://guix.gnu.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87d015y1wn.fsf@gmail.com \
    --to=maxim.cournoyer@gmail.com \
    --cc=guix-devel@gnu.org \
    --cc=rosen644835@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/guix.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).