From: Fredrik Salomonsson <plattfot@posteo.net>
To: "Ludovic Courtès" <ludo@gnu.org>
Cc: 55420@debbugs.gnu.org
Subject: [bug#55420] [PATCH 0/2] Add a function to parse emacs elisp's package header
Date: Thu, 02 Jun 2022 02:53:42 +0000 [thread overview]
Message-ID: <87zgivai89.fsf@d2.com> (raw)
In-Reply-To: <87ee08t8z5.fsf_-_@gnu.org>
Hi Ludo,
Ludovic Courtès <ludo@gnu.org> writes:
> Hi Fredrik,
>
> The patches LGTM modulo cosmetic issues:
>
> Fredrik Salomonsson <plattfot@posteo.net> skribis:
>
>> * guix/build/emacs-utils.scm (emacs-batch-script): New procedure.
>
> [...]
>
>> +(define (emacs-batch-script expr)
>> + "Execute the Elisp code EXPR in Emacs batch mode and return output."
>> + (call-with-port
>> + (open-pipe*
>> + OPEN_READ
>> + (%emacs) "--quick" "--batch"
>> + (string-append "--eval=" (expr->string expr)))
>> + read-string))
>
> I suggest something like:
>
> (let* ((pipe (open-pipe* …))
> (output (read-string pipe))
> (status (close-pipe pipe)))
> (unless (zero? status)
> ;; Use SRFI-34 + either a &message condition or (better)
> ;; a dedicate SRFI-35 condition type for the error.
> (raise (condition …)))
> output)
>
> That way, execution failures would be caught and reported.
Thank you for the feedback. I update the procedure to use a dedicated
SRFI-35 condition type. But I cannot figure out how to capture the error
message from emacs, as I want the condition type to contain both the
expression as well as the error you get from emacs.
Here is what I have so far:
(define-condition-type &emacs-batch-error &error
emacs-batch-error?
(expression emacs-batch-error-expression)
(message emacs-batch-error-message))
(define (emacs-batch-script expr)
"Execute the Elisp code EXPR in Emacs batch mode and return output."
(let* ((error-pipe (open-output-string))
(pipe (with-error-to-port error-pipe
(lambda ()
(open-pipe*
OPEN_READ
(%emacs) "--quick" "--batch"
(string-append "--eval=" (expr->string expr))))))
(output (read-string pipe))
(error (get-output-string error-pipe))
(status (close-pipe pipe)))
(unless (zero? status)
(raise (condition (&emacs-batch-error
(expression expr)
(message error)))))
output))
Here is the output when I test it out in the guix repl:
--------------------------------------------------------------------------------
scheme@(guix-user)> (use-modules (guix build emacs-utils))
(use-modules (guix build emacs-utils))
scheme@(guix-user)> (emacs-batch-script '(prog (princ "hello")))
(emacs-batch-script '(prog (princ "hello")))
ice-9/boot-9.scm:1685:16: In procedure raise-exception:
Wrong type (expecting exact integer): #<&emacs-batch-error expression: (prog (princ "hello")) message: "">
Entering a new prompt. Type `,bt' for a backtrace or `,q' to continue.
scheme@(guix-user) [1]>
--------------------------------------------------------------------------------
Note the message is empty in #<&emacs-batch-error…>. It should contain:
Debugger entered--Lisp error: (void-function prog)
(prog (princ "hello"))
command-line-1(("--eval=(prog (princ \"hello\"))"))
command-line()
normal-top-level()
Any idea what I'm doing wrong?
Thanks
--
s/Fred[re]+i[ck]+/Fredrik/g
next prev parent reply other threads:[~2022-06-02 2:54 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-05-14 23:00 [bug#55420] [PATCH 0/2] Add a function to parse emacs elisp's package header Fredrik Salomonsson
2022-05-14 23:05 ` [bug#55420] [PATCH 1/2] guix: emacs-utils: Add emacs-batch-script Fredrik Salomonsson
2022-05-14 23:05 ` [bug#55420] [PATCH 2/2] guix: emacs-utils: Add emacs-header-parse Fredrik Salomonsson
2022-06-01 20:39 ` [bug#55420] [PATCH 0/2] Add a function to parse emacs elisp's package header Ludovic Courtès
2022-06-01 20:38 ` Ludovic Courtès
2022-06-02 2:53 ` Fredrik Salomonsson [this message]
2022-06-02 13:44 ` Ludovic Courtès
2022-06-05 0:42 ` Fredrik Salomonsson
2022-06-05 0:19 ` [bug#55420] [PATCH v2 1/2] guix: emacs-utils: Add emacs-batch-script Fredrik Salomonsson
2022-06-05 0:19 ` [bug#55420] [PATCH v2 2/2] guix: emacs-utils: Add emacs-header-parse Fredrik Salomonsson
2022-06-05 9:52 ` [bug#55420] [PATCH v2 1/2] guix: emacs-utils: Add emacs-batch-script Maxime Devos
2022-06-05 20:02 ` Fredrik Salomonsson
2022-06-05 19:51 ` [bug#55420] [PATCH v3 " Fredrik Salomonsson
2022-06-05 19:51 ` [bug#55420] [PATCH v3 2/2] guix: emacs-utils: Add emacs-header-parse Fredrik Salomonsson
2022-06-17 20:29 ` bug#55420: [PATCH 0/2] Add a function to parse emacs elisp's package header Ludovic Courtès
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=87zgivai89.fsf@d2.com \
--to=plattfot@posteo.net \
--cc=55420@debbugs.gnu.org \
--cc=ludo@gnu.org \
/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).