diff options
author | Ludovic Courtès <ludo@gnu.org> | 2022-06-08 14:46:24 +0200 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2022-06-08 14:46:24 +0200 |
commit | 8c3e9da13a3c92a7db308db8c0d81cb474ad7799 (patch) | |
tree | 88d06952aa5cc3a9c4991d9c43eb7950ff174fe1 /guix/build/emacs-utils.scm | |
parent | 5439c04ebdb7b6405f5ea2446b375f1d155a8d95 (diff) | |
parent | 0c5299200ffcd16370f047b7ccb187c60f30da34 (diff) |
Merge branch 'master' into core-updates
Diffstat (limited to 'guix/build/emacs-utils.scm')
-rw-r--r-- | guix/build/emacs-utils.scm | 47 |
1 files changed, 36 insertions, 11 deletions
diff --git a/guix/build/emacs-utils.scm b/guix/build/emacs-utils.scm index 64ef40e25a..60a754b9e9 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, 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com> +;;; Copyright © 2018, 2020, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com> ;;; Copyright © 2019 Liliana Marie Prikler <liliana.prikler@gmail.com> ;;; ;;; This file is part of GNU Guix. @@ -28,6 +28,8 @@ emacs-batch-disable-compilation emacs-generate-autoloads emacs-byte-compile-directory + + as-display emacs-substitute-sexps emacs-substitute-variables)) @@ -82,6 +84,24 @@ true, evaluate using dynamic scoping." (byte-recompile-directory (file-name-as-directory ,dir) 0 1)))) (emacs-batch-eval expr))) +(define as-display ;syntactic keyword for 'emacs-substitute-sexps' + '(as display)) + +(define-syntax replacement-helper + (syntax-rules (as-display) + ((_ (leading-regexp replacement (as-display))) + `(progn (goto-char (point-min)) + (re-search-forward ,leading-regexp) + (kill-sexp) + (insert " ") + (insert ,(format #f "~a" replacement)))) + ((_ (leading-regexp replacement)) + `(progn (goto-char (point-min)) + (re-search-forward ,leading-regexp) + (kill-sexp) + (insert " ") + (insert ,(format #f "~s" replacement)))))) + (define-syntax emacs-substitute-sexps (syntax-rules () "Substitute the S-expression immediately following the first occurrence of @@ -95,14 +115,15 @@ LEADING-REGEXP by the string returned by REPLACEMENT in FILE. For example: This replaces the default values of the `w3m-command' and `w3m-image-viewer' variables declared in `w3m.el' with the results of the `string-append' calls -above. Note that LEADING-REGEXP uses Emacs regexp syntax." - ((emacs-substitute-sexps file (leading-regexp replacement) ...) +above. Note that LEADING-REGEXP uses Emacs regexp syntax. + +Here is another example that uses the '(as-display)' subform to avoid having +the Elisp procedure symbol from being double quoted: + (emacs-substitute-sexps \"gnugo.el\" + (\"defvar gnugo-xpms\" \"#'gnugo-imgen-create-xpms\" (as-display))" + ((_ file replacement-spec ...) (emacs-batch-edit-file file - `(progn (progn (goto-char (point-min)) - (re-search-forward ,leading-regexp) - (kill-sexp) - (insert " ") - (insert ,(format #f "~S" replacement))) + `(progn ,(replacement-helper replacement-spec) ... (basic-save-buffer)))))) @@ -117,11 +138,15 @@ REPLACEMENT in FILE. For example: This replaces the default values of the `w3m-command' and `w3m-image-viewer' variables declared in `w3m.el' with the results of the `string-append' calls -above." - ((emacs-substitute-variables file (variable replacement) ...) +above. Similarly to `emacs-substitute-sexps', the '(as-display)' subform can +be used to have the replacement formatted like `display' would, which can be +useful to avoid double quotes being added when the replacement is provided as +a string." + ((_ file (variable replacement modifier ...) ...) (emacs-substitute-sexps file ((string-append "(def[a-z]+[[:space:]\n]+" variable "\\>") - replacement) + replacement + modifier ...) ...)))) ;;; emacs-utils.scm ends here |