From afc6b1c0b635e3268795c0f766be408c5e9858e7 Mon Sep 17 00:00:00 2001 From: Maxim Cournoyer Date: Sun, 22 Mar 2020 10:42:44 -0400 Subject: 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 . * 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. --- guix/build/emacs-utils.scm | 13 ++++++++----- 1 file 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 ;;; Copyright © 2014 Alex Kost -;;; Copyright © 2018 Maxim Cournoyer +;;; Copyright © 2018, 2020 Maxim Cournoyer ;;; Copyright © 2019 Leo Prikler ;;; ;;; 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." -- cgit v1.2.3