mirror of
git://git.sv.gnu.org/emacs.git
synced 2025-12-15 10:30:25 -08:00
Handle escaped characters in Eshell special references (e.g. buffers)
* lisp/eshell/esh-arg.el (eshell-parse-special-reference): Unescape escaped characters. * test/lisp/eshell/eshell-tests-helpers.el (with-temp-eshell): Restore current buffer after evaluating BODY. * test/lisp/eshell/eshell-tests.el (eshell-test/redirect-buffer) (eshell-test/redirect-buffer-escaped): New tests (bug#55204).
This commit is contained in:
parent
bb40507fed
commit
32ab756d82
3 changed files with 34 additions and 12 deletions
|
|
@ -401,7 +401,9 @@ If the form has no `type', the syntax is parsed as if `type' were
|
|||
(if (eshell-arg-delimiter (1+ end))
|
||||
(prog1
|
||||
(list (if buffer-p 'get-buffer-create 'get-process)
|
||||
(buffer-substring-no-properties (point) end))
|
||||
(replace-regexp-in-string
|
||||
(rx "\\" (group (or "\\" "<" ">"))) "\\1"
|
||||
(buffer-substring-no-properties (point) end)))
|
||||
(goto-char (1+ end)))
|
||||
(ignore (goto-char here)))))))
|
||||
|
||||
|
|
|
|||
|
|
@ -38,17 +38,18 @@ See `eshell-wait-for-subprocess'.")
|
|||
|
||||
(defmacro with-temp-eshell (&rest body)
|
||||
"Evaluate BODY in a temporary Eshell buffer."
|
||||
`(ert-with-temp-directory eshell-directory-name
|
||||
(let* (;; We want no history file, so prevent Eshell from falling
|
||||
;; back on $HISTFILE.
|
||||
(process-environment (cons "HISTFILE" process-environment))
|
||||
(eshell-history-file-name nil)
|
||||
(eshell-buffer (eshell t)))
|
||||
(unwind-protect
|
||||
(with-current-buffer eshell-buffer
|
||||
,@body)
|
||||
(let (kill-buffer-query-functions)
|
||||
(kill-buffer eshell-buffer))))))
|
||||
`(save-current-buffer
|
||||
(ert-with-temp-directory eshell-directory-name
|
||||
(let* (;; We want no history file, so prevent Eshell from falling
|
||||
;; back on $HISTFILE.
|
||||
(process-environment (cons "HISTFILE" process-environment))
|
||||
(eshell-history-file-name nil)
|
||||
(eshell-buffer (eshell t)))
|
||||
(unwind-protect
|
||||
(with-current-buffer eshell-buffer
|
||||
,@body)
|
||||
(let (kill-buffer-query-functions)
|
||||
(kill-buffer eshell-buffer)))))))
|
||||
|
||||
(defun eshell-wait-for-subprocess (&optional all)
|
||||
"Wait until there is no interactive subprocess running in Eshell.
|
||||
|
|
|
|||
|
|
@ -114,6 +114,25 @@ e.g. \"{(+ 1 2)} 3\" => 3"
|
|||
(eshell-wait-for-subprocess)
|
||||
(eshell-match-result "OLLEH\n")))
|
||||
|
||||
(ert-deftest eshell-test/redirect-buffer ()
|
||||
"Check that piping to a buffer works"
|
||||
(with-temp-buffer
|
||||
(rename-buffer "eshell-temp-buffer" t)
|
||||
(let ((bufname (buffer-name)))
|
||||
(with-temp-eshell
|
||||
(eshell-insert-command (format "echo hi > #<%s>" bufname)))
|
||||
(should (equal (buffer-string) "hi")))))
|
||||
|
||||
(ert-deftest eshell-test/redirect-buffer-escaped ()
|
||||
"Check that piping to a buffer with escaped characters works"
|
||||
(with-temp-buffer
|
||||
(rename-buffer "eshell\\temp\\buffer" t)
|
||||
(let ((bufname (buffer-name)))
|
||||
(with-temp-eshell
|
||||
(eshell-insert-command (format "echo hi > #<%s>"
|
||||
(string-replace "\\" "\\\\" bufname))))
|
||||
(should (equal (buffer-string) "hi")))))
|
||||
|
||||
(ert-deftest eshell-test/inside-emacs-var ()
|
||||
"Test presence of \"INSIDE_EMACS\" in subprocesses"
|
||||
(with-temp-eshell
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue