diff options
author | Jim Porter <jporterbugs@gmail.com> | 2022-02-28 09:31:22 -0800 |
---|---|---|
committer | Eli Zaretskii <eliz@gnu.org> | 2022-03-01 15:01:16 +0200 |
commit | 9e257aecc9a3456fb3d66596862d44030f7d76c8 (patch) | |
tree | e75ed62ca34294c908071701b14d089c50c256bd | |
parent | b8bc359bbfd36b3e281bdcba154ed74ca897d850 (diff) | |
download | emacs-9e257aecc9a3456fb3d66596862d44030f7d76c8.tar.gz |
Partially revert b03f74e0f2a578b1580e8b1c368665850ee7f808
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.el | 8 | ||||
-rw-r--r-- | test/lisp/eshell/eshell-tests.el | 4 |
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))) |