diff options
author | Maxim Cournoyer <maxim.cournoyer@gmail.com> | 2020-03-22 10:42:44 -0400 |
---|---|---|
committer | Maxim Cournoyer <maxim.cournoyer@gmail.com> | 2020-03-22 21:17:38 -0400 |
commit | afc6b1c0b635e3268795c0f766be408c5e9858e7 (patch) | |
tree | cc93d5ea9cfcb72831b25b8c18c84fb1948de8d2 /guix | |
parent | 6607aad53cce018e55fc26fc643978389132eddb (diff) | |
download | gnu-guix-afc6b1c0b635e3268795c0f766be408c5e9858e7.tar gnu-guix-afc6b1c0b635e3268795c0f766be408c5e9858e7.tar.gz |
build: emacs-utils: Add an option to select scoping for batch eval.
In Emacs 27, --eval now evaluates using lexical scoping. This change adds an
option to select dynamic scoping, by using a workaround proposed in
<https://bugs.gnu.org/39823>.
* guix/build/emacs-utils.scm (emacs-batch-eval): Add a DYNAMIC? keyword
argument. Wrap the EXPR with a call to EVAL that makes use of the argument
to select the scoping mode.
(emacs-generate-autoloads): Use it.
Diffstat (limited to 'guix')
-rw-r--r-- | guix/build/emacs-utils.scm | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/guix/build/emacs-utils.scm b/guix/build/emacs-utils.scm index ab64e3714c..5f7ba71244 100644 --- a/guix/build/emacs-utils.scm +++ b/guix/build/emacs-utils.scm @@ -1,7 +1,7 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2014, 2018 Mark H Weaver <mhw@netris.org> ;;; Copyright © 2014 Alex Kost <alezost@gmail.com> -;;; Copyright © 2018 Maxim Cournoyer <maxim.cournoyer@gmail.com> +;;; Copyright © 2018, 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com> ;;; Copyright © 2019 Leo Prikler <leo.prikler@student.tugraz.at> ;;; ;;; This file is part of GNU Guix. @@ -21,6 +21,7 @@ (define-module (guix build emacs-utils) #:use-module (guix build utils) + #:use-module (ice-9 format) #:export (%emacs emacs-batch-eval emacs-batch-edit-file @@ -47,10 +48,12 @@ expr (format #f "~s" expr))) -(define (emacs-batch-eval expr) - "Run Emacs in batch mode, and execute the elisp code EXPR." +(define* (emacs-batch-eval expr #:key dynamic?) + "Run Emacs in batch mode, and execute the Elisp code EXPR. If DYNAMIC? is +true, evaluate using dynamic scoping." (invoke (%emacs) "--quick" "--batch" - (string-append "--eval=" (expr->string expr)))) + (format #f "--eval=(eval '~a ~:[t~;nil~])" + (expr->string expr) dynamic?))) (define (emacs-batch-edit-file file expr) "Load FILE in Emacs using batch mode, and execute the elisp code EXPR." @@ -70,7 +73,7 @@ (expr `(let ((backup-inhibited t) (generated-autoload-file ,file)) (update-directory-autoloads ,directory)))) - (emacs-batch-eval expr))) + (emacs-batch-eval expr #:dynamic? #t))) (define* (emacs-byte-compile-directory dir) "Byte compile all files in DIR and its sub-directories." |