From fab48a28ff80f1c74f2d50d4f69edb056f88d119 Mon Sep 17 00:00:00 2001 From: Jim Porter Date: Sun, 27 Mar 2022 19:04:42 -0700 Subject: [PATCH] Make Eshell's extpipe more lenient when looking for its operators This could cause some errors when executing Eshell commands with an odd number of quotation marks, such as "(eq 'foo nil)". * lisp/eshell/em-extpipe.el (eshell-parse-external-pipeline): Catch 'eshell-incomplete' errors. * test/lisp/eshell/eshell-tests.el (eshell-test/lisp-command-with-quote): New test. --- lisp/eshell/em-extpipe.el | 9 +++++---- test/lisp/eshell/eshell-tests.el | 4 ++++ 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/lisp/eshell/em-extpipe.el b/lisp/eshell/em-extpipe.el index eb5b3bfe1d..e7b421982a 100644 --- a/lisp/eshell/em-extpipe.el +++ b/lisp/eshell/em-extpipe.el @@ -105,10 +105,11 @@ eshell-parse-external-pipeline (if (re-search-forward pat next t) (throw 'found (match-beginning 1)) (goto-char next) - (while (or (eshell-parse-lisp-argument) - (eshell-parse-backslash) - (eshell-parse-double-quote) - (eshell-parse-literal-quote))) + (catch 'eshell-incomplete + (while (or (eshell-parse-lisp-argument) + (eshell-parse-backslash) + (eshell-parse-double-quote) + (eshell-parse-literal-quote)))) ;; Guard against an infinite loop if none of ;; the parsers moved us forward. (unless (or (> (point) next) (eobp)) diff --git a/test/lisp/eshell/eshell-tests.el b/test/lisp/eshell/eshell-tests.el index e31db07c61..1e303f70e5 100644 --- a/test/lisp/eshell/eshell-tests.el +++ b/test/lisp/eshell/eshell-tests.el @@ -44,6 +44,10 @@ eshell-test/lisp-command "Test `eshell-command-result' with an elisp command." (should (equal (eshell-test-command-result "(+ 1 2)") 3))) +(ert-deftest eshell-test/lisp-command-with-quote () + "Test `eshell-command-result' with an elisp command containing a quote." + (should (equal (eshell-test-command-result "(eq 'foo nil)") nil))) + (ert-deftest eshell-test/for-loop () "Test `eshell-command-result' with a for loop.." (let ((process-environment (cons "foo" process-environment))) -- 2.25.1