From 4408be75ba7e7cc0e1bb7a56438f300ced3db56b Mon Sep 17 00:00:00 2001 From: Jim Porter Date: Tue, 26 Apr 2022 21:51:23 -0700 Subject: [PATCH 2/3] Handle escaped characters in Eshell argument predicates/modifiers * lisp/eshell/em-pred.el (eshell-get-delimited-modifier-argument): Unescape escaped characters. * test/lisp/eshell/em-pred-tests.el (em-pred-test/predicate-escaping): New test (bug#55204). --- lisp/eshell/em-pred.el | 4 +++- test/lisp/eshell/em-pred-tests.el | 12 ++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/lisp/eshell/em-pred.el b/lisp/eshell/em-pred.el index 594563554d..d73976d346 100644 --- a/lisp/eshell/em-pred.el +++ b/lisp/eshell/em-pred.el @@ -416,7 +416,9 @@ eshell-get-delimited-modifier-argument (close (cdr (assoc open eshell-pred-delimiter-pairs))) (end (eshell-find-delimiter open close nil nil t))) (prog1 - (buffer-substring-no-properties (1+ (point)) end) + (replace-regexp-in-string + (rx-to-string `(seq "\\" (group (or "\\" ,open ,close)))) "\\1" + (buffer-substring-no-properties (1+ (point)) end)) (goto-char (if (and chained-p (eq open close)) end (1+ end)))))) diff --git a/test/lisp/eshell/em-pred-tests.el b/test/lisp/eshell/em-pred-tests.el index 4d2af39292..3b50543d69 100644 --- a/test/lisp/eshell/em-pred-tests.el +++ b/test/lisp/eshell/em-pred-tests.el @@ -533,4 +533,16 @@ em-pred-test/predicate-delimiters (format ":j%c-%c" (car delims) (cdr delims))) "foo-bar-baz")))) +(ert-deftest em-pred-test/predicate-escaping () + "Test string escaping in predicate and modifier parameters." + ;; Escaping the delimiter should remove the backslash. + (should (equal (eshell-eval-predicate '("foo" "bar" "baz") ":j'\\''") + "foo'bar'baz")) + ;; Escaping a backlash should remove the first backslash. + (should (equal (eshell-eval-predicate '("foo" "bar" "baz") ":j'\\\\'") + "foo\\bar\\baz")) + ;; Escaping a different character should keep the backslash. + (should (equal (eshell-eval-predicate '("foo" "bar" "baz") ":j'\\\"'") + "foo\\\"bar\\\"baz"))) + ;; em-pred-tests.el ends here -- 2.25.1