Subject: Re: [bug#60753] [PATCH] gnu: home: Add home-emacs-service-type.

From: Ludovic Courtès <[email-masked]>
Date: Mon, 23 Jan 2023 11:18:47 +0100

Hi,

Andrew Tropin <[email-masked]> skribis:

> On 2023-01-17 10:02, Ludovic Courtès wrote:
>
>> Hi,
>>
>> Andrew Tropin <[email-masked]> skribis:
>>
>>>> What about accepting sexps (or gexps) instead of strings?  As in:
>>>>
>>>>   (init-file '((require 'whatever) (setq something t)))
>>>
>>> A quick minor note on this approach: it won't be possible to use
>>> #'elisp-function inside such configuration because it will be
>>> interpreted by guile reader, but actually rde lives without this
>>> functionality completely ok.
>>
>> Specifically:
>>
>>   (write '#'x)
>>   |= (syntax x)
>>
>> But we can use (guix read-print) and ensure that it prints #'.
>>
>
> Do you have any links to docs/sample implementations on the topic of
> extending guile reader, so we have an example to start with?

It’s not the reader but rather the writer that we’d want to tweak.

In (guix read-print), ‘pretty-print-with-comments’ already special cases
quasiquote etc. so that it prints ‘`’ (backtick) and not ‘quasiquote'.
We’d add clauses for ‘syntax’ and ‘quasisyntax’.

> I think it will be cool to hook up a custom reader, ideally comment
> preserving, for emacs lisp inside scheme files.

(guix read-print) is what you want.  :-)

>>> Do we want something like this possible?
>>>
>>> (init-file `((require 'whatever)
>>>              (setq something t)
>>>              (load ,(local-file "old-init.el")))
>>
>> It’d be nice.  In that case, we’ll want it to be a gexp though:
>>
>>   #~((require 'whatever) (load #$(local-file …)))
>>
>
> gexps are nice, but do we really need/want them here?  Do you have any
> thoughts on what are the benifits over quasiquotes in this case?  Maybe
> some examples?

The benefit in the example above is that the gexp would actually work
whereas the sexp wouldn’t :-), unless there’s code somewhere to manually
traverse the sexp adn replace the <local-file> record with its store
item (which is what gexps are about).

I hope that makes sense!

Ludo’.