diff options
| author | Jim Porter | 2023-09-23 11:36:11 -0700 |
|---|---|---|
| committer | Jim Porter | 2023-10-02 20:49:41 -0700 |
| commit | 498d31e9f0549189f4e9b140549419dd4e462575 (patch) | |
| tree | e66ae54cfe9f53d7481df35850a066042e0b6e1d /test/lisp/eshell/eshell-tests.el | |
| parent | 8f2cfe15a72a0c440909faa50a9c436931dcf85e (diff) | |
| download | emacs-498d31e9f0549189f4e9b140549419dd4e462575.tar.gz emacs-498d31e9f0549189f4e9b140549419dd4e462575.zip | |
Support Eshell iterative evaluation in the background
This really just generalizes Eshell's previous support for iterative
evaluation of a single current command to a list of multiple commands,
of which at most one can be in the foreground (bug#66066).
* lisp/eshell/esh-cmd.el (eshell-last-async-procs)
(eshell-current-command): Make obsolete in favor of...
(eshell-foreground-command): ... this
(eshell-background-commands): New variable.
(eshell-interactive-process-p): Make obsolete.
(eshell-head-process, eshell-tail-process): Use
'eshell-foreground-command'.
(eshell-cmd-initialize): Initialize new variables.
(eshell-add-command, eshell-remove-command)
(eshell-commands-for-process): New functions.
(eshell-parse-command): Make 'eshell-do-subjob' the outermost call.
(eshell-do-subjob): Call 'eshell-resume-eval' to split this command
off from its parent forms.
(eshell-eval-command): Use 'eshell-add-command'.
(eshell-resume-command): Use 'eshell-commands-for-process'.
(eshell-resume-eval): Take a COMMAND argument. Return
':eshell-background' form for deferred background commands.
(eshell-do-eval): Remove check for 'eshell-current-subjob-p'. This is
handled differently now.
* lisp/eshell/eshell.el (eshell-command): Wait for all processes to
exit when running synchronously.
* lisp/eshell/esh-mode.el (eshell-intercept-commands)
(eshell-watch-for-password-prompt):
* lisp/eshell/em-cmpl.el (eshell-complete-parse-arguments):
* lisp/eshell/em-smart.el (eshell-smart-display-move): Use
'eshell-foreground-command'.
* test/lisp/eshell/esh-cmd-tests.el
(esh-cmd-test/background/simple-command)
(esh-cmd-test/background/subcommand): New tests.
(esh-cmd-test/throw): Use 'eshell-foreground-command'.
* test/lisp/eshell/eshell-tests.el (eshell-test/queue-input): Use
'eshell-foreground-command'.
* test/lisp/eshell/em-script-tests.el
(em-script-test/source-script/background): Make the test script more
complex.
* test/lisp/eshell/eshell-tests.el
(eshell-test/eshell-command/pipeline-wait): New test.
* doc/misc/eshell.texi (Bugs and ideas): Remove implemented feature.
Diffstat (limited to 'test/lisp/eshell/eshell-tests.el')
| -rw-r--r-- | test/lisp/eshell/eshell-tests.el | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/test/lisp/eshell/eshell-tests.el b/test/lisp/eshell/eshell-tests.el index 25c8cfd389c..b02e5fca592 100644 --- a/test/lisp/eshell/eshell-tests.el +++ b/test/lisp/eshell/eshell-tests.el | |||
| @@ -58,6 +58,18 @@ This test uses a pipeline for the command." | |||
| 58 | (eshell-command "*echo hi | *cat" t) | 58 | (eshell-command "*echo hi | *cat" t) |
| 59 | (should (equal (buffer-string) "hi\n")))))) | 59 | (should (equal (buffer-string) "hi\n")))))) |
| 60 | 60 | ||
| 61 | (ert-deftest eshell-test/eshell-command/pipeline-wait () | ||
| 62 | "Check that `eshell-command' waits for all its processes before returning." | ||
| 63 | (skip-unless (and (executable-find "echo") | ||
| 64 | (executable-find "sh") | ||
| 65 | (executable-find "rev"))) | ||
| 66 | (ert-with-temp-directory eshell-directory-name | ||
| 67 | (let ((eshell-history-file-name nil)) | ||
| 68 | (with-temp-buffer | ||
| 69 | (eshell-command | ||
| 70 | "*echo hello | sh -c 'sleep 1; rev' 1>&2 | *echo goodbye" t) | ||
| 71 | (should (equal (buffer-string) "goodbye\nolleh\n")))))) | ||
| 72 | |||
| 61 | (ert-deftest eshell-test/eshell-command/background () | 73 | (ert-deftest eshell-test/eshell-command/background () |
| 62 | "Test that `eshell-command' works for background commands." | 74 | "Test that `eshell-command' works for background commands." |
| 63 | (skip-unless (executable-find "echo")) | 75 | (skip-unless (executable-find "echo")) |
| @@ -132,7 +144,7 @@ insert the queued one at the next prompt, and finally run it." | |||
| 132 | (eshell-insert-command "sleep 1; echo slept") | 144 | (eshell-insert-command "sleep 1; echo slept") |
| 133 | (eshell-insert-command "echo alpha" #'eshell-queue-input) | 145 | (eshell-insert-command "echo alpha" #'eshell-queue-input) |
| 134 | (let ((start (marker-position (eshell-beginning-of-output)))) | 146 | (let ((start (marker-position (eshell-beginning-of-output)))) |
| 135 | (eshell-wait-for (lambda () (not eshell-current-command))) | 147 | (eshell-wait-for (lambda () (not eshell-foreground-command))) |
| 136 | (should (string-match "^slept\n.*echo alpha\nalpha\n$" | 148 | (should (string-match "^slept\n.*echo alpha\nalpha\n$" |
| 137 | (buffer-substring-no-properties | 149 | (buffer-substring-no-properties |
| 138 | start (eshell-end-of-output))))))) | 150 | start (eshell-end-of-output))))))) |