summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJim Porter <jporterbugs@gmail.com>2022-02-28 09:31:22 -0800
committerEli Zaretskii <eliz@gnu.org>2022-03-01 15:01:16 +0200
commit9e257aecc9a3456fb3d66596862d44030f7d76c8 (patch)
treee75ed62ca34294c908071701b14d089c50c256bd
parentb8bc359bbfd36b3e281bdcba154ed74ca897d850 (diff)
downloademacs-9e257aecc9a3456fb3d66596862d44030f7d76c8.tar.gz
That commit regressed '$<command>' forms in Eshell, due to a limitation/bug in how 'eshell-do-eval' works. This fixes bug#54190. * lisp/eshell/esh-var.el (eshell-parse-variable-ref): Quote a lambda. * test/lisp/eshell/eshell-tests.el (eshell-test/interp-temp-cmd): New test.
-rw-r--r--lisp/eshell/esh-var.el8
-rw-r--r--test/lisp/eshell/eshell-tests.el4
2 files changed, 10 insertions, 2 deletions
diff --git a/lisp/eshell/esh-var.el b/lisp/eshell/esh-var.el
index 145a522516d..081938b4e4a 100644
--- a/lisp/eshell/esh-var.el
+++ b/lisp/eshell/esh-var.el
@@ -460,8 +460,12 @@ Possible options are:
(eshell-as-subcommand ,(eshell-parse-command cmd))
(ignore
(nconc eshell-this-command-hook
- (list (lambda ()
- (delete-file ,temp)))))
+ ;; Quote this lambda; it will be evaluated
+ ;; by `eshell-do-eval', which requires very
+ ;; particular forms in order to work
+ ;; properly. See bug#54190.
+ (list (function (lambda ()
+ (delete-file ,temp))))))
(quote ,temp)))
(goto-char (1+ end)))))))
((eq (char-after) ?\()
diff --git a/test/lisp/eshell/eshell-tests.el b/test/lisp/eshell/eshell-tests.el
index a9b1e2ab4e8..fe4fba294fd 100644
--- a/test/lisp/eshell/eshell-tests.el
+++ b/test/lisp/eshell/eshell-tests.el
@@ -130,6 +130,10 @@ e.g. \"{(+ 1 2)} 3\" => 3"
"Interpolate Lisp form evaluation"
(should (equal (eshell-test-command-result "+ $(+ 1 2) 3") 6)))
+(ert-deftest eshell-test/interp-temp-cmd ()
+ "Interpolate command result redirected to temp file"
+ (should (equal (eshell-test-command-result "cat $<echo hi>") "hi")))
+
(ert-deftest eshell-test/interp-concat ()
"Interpolate and concat command"
(should (equal (eshell-test-command-result "+ ${+ 1 2}3 3") 36)))