<feed xmlns='http://www.w3.org/2005/Atom'>
<title>emacs/test/lisp/eshell, branch tty-child-frames</title>
<subtitle>Emacs is the extensible, customizable, self-documenting real-time display editor. 
</subtitle>
<link rel='alternate' type='text/html' href='https://jason.zzq.org/git/emacs/'/>
<entry>
<title>Support "/dev/null" as a target when creating Eshell handles</title>
<updated>2024-08-29T02:14:30+00:00</updated>
<author>
<name>Jim Porter</name>
</author>
<published>2024-08-29T02:12:29+00:00</published>
<link rel='alternate' type='text/html' href='https://jason.zzq.org/git/emacs/commit/?id=b6f4ffcc106fdbc21dfea45c75fdc4f217d8f201'/>
<id>b6f4ffcc106fdbc21dfea45c75fdc4f217d8f201</id>
<content type='text'>
Previously, you could only use this when setting the handle afterwards.

* lisp/eshell/esh-io.el (eshell-set-output-handle): Don't catch
'eshell-null-device' here...
(eshell-get-target): ... catch it here.

* test/lisp/eshell/eshell-tests.el
(eshell-test/eshell-command/output-dev-null): New test (bug#72857).
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Previously, you could only use this when setting the handle afterwards.

* lisp/eshell/esh-io.el (eshell-set-output-handle): Don't catch
'eshell-null-device' here...
(eshell-get-target): ... catch it here.

* test/lisp/eshell/eshell-tests.el
(eshell-test/eshell-command/output-dev-null): New test (bug#72857).
</pre>
</div>
</content>
</entry>
<entry>
<title>Fix redirecting Eshell output to symbols in some places</title>
<updated>2024-08-29T01:53:03+00:00</updated>
<author>
<name>Jim Porter</name>
</author>
<published>2024-08-29T01:53:03+00:00</published>
<link rel='alternate' type='text/html' href='https://jason.zzq.org/git/emacs/commit/?id=e269cf63a67d529740d0ec2382ae7c3a982cd064'/>
<id>e269cf63a67d529740d0ec2382ae7c3a982cd064</id>
<content type='text'>
* lisp/eshell/esh-io.el (eshell-output-object-to-target): Don't require
TARGET to be bound.

* lisp/eshell/em-script.el (eshell-execute-file):
* lisp/eshell/eshell.el (eshell-command): Quote the output/error
targets.

* test/lisp/eshell/em-script-tests.el (eshell-execute-file-output): New
variable.
(em-script-test/execute-file/output-symbol): New test.

* test/lisp/eshell/eshell-tests.el (eshell-command-output): New
variable.
(eshell-test/eshell-command/output-symbol): New test (bug#72857).
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* lisp/eshell/esh-io.el (eshell-output-object-to-target): Don't require
TARGET to be bound.

* lisp/eshell/em-script.el (eshell-execute-file):
* lisp/eshell/eshell.el (eshell-command): Quote the output/error
targets.

* test/lisp/eshell/em-script-tests.el (eshell-execute-file-output): New
variable.
(em-script-test/execute-file/output-symbol): New test.

* test/lisp/eshell/eshell-tests.el (eshell-command-output): New
variable.
(eshell-test/eshell-command/output-symbol): New test (bug#72857).
</pre>
</div>
</content>
</entry>
<entry>
<title>Use 'eshell-with-handles' in a few more places</title>
<updated>2024-08-29T01:48:28+00:00</updated>
<author>
<name>Jim Porter</name>
</author>
<published>2024-08-29T01:30:29+00:00</published>
<link rel='alternate' type='text/html' href='https://jason.zzq.org/git/emacs/commit/?id=5c68545a936ab42df90c8498ca77207a5e6aff1f'/>
<id>5c68545a936ab42df90c8498ca77207a5e6aff1f</id>
<content type='text'>
* lisp/eshell/em-alias.el (eshell-write-aliases-list):
* lisp/eshell/em-script.el (eshell-batch-file):
* lisp/eshell/esh-cmd.el (eshell-command-to-value):
* lisp/eshell/eshell.el (eshell-command): Use 'eshell-with-handles'.

* test/lisp/eshell/esh-io-tests.el (eshell-test-file-string): Move to...
* test/lisp/eshell/eshell-tests-helpers.el (eshell-test-file-string):
... here.

* test/lisp/eshell/eshell-tests.el
(eshell-test/eshell-command/output-file):
* test/lisp/eshell/em-script-tests.el
(em-script-test/execute-file/output-file): New tests.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* lisp/eshell/em-alias.el (eshell-write-aliases-list):
* lisp/eshell/em-script.el (eshell-batch-file):
* lisp/eshell/esh-cmd.el (eshell-command-to-value):
* lisp/eshell/eshell.el (eshell-command): Use 'eshell-with-handles'.

* test/lisp/eshell/esh-io-tests.el (eshell-test-file-string): Move to...
* test/lisp/eshell/eshell-tests-helpers.el (eshell-test-file-string):
... here.

* test/lisp/eshell/eshell-tests.el
(eshell-test/eshell-command/output-file):
* test/lisp/eshell/em-script-tests.el
(em-script-test/execute-file/output-file): New tests.
</pre>
</div>
</content>
</entry>
<entry>
<title>Use 'unwind-protect' to ensure that Eshell always closes I/O handles</title>
<updated>2024-07-27T20:57:17+00:00</updated>
<author>
<name>Jim Porter</name>
</author>
<published>2024-07-20T01:02:16+00:00</published>
<link rel='alternate' type='text/html' href='https://jason.zzq.org/git/emacs/commit/?id=50339b38fdef31982744bdb8b51838012dd4ef47'/>
<id>50339b38fdef31982744bdb8b51838012dd4ef47</id>
<content type='text'>
See bug#72220.

* lisp/eshell/esh-cmd.el (eshell-with-handles): New macro...
(eshell-commands): ... use it.
(eshell-with-copied-handles): Remove STEAL-P and allow multiple body
forms (this is an incompatible change, but the macro is currently
internal despite the name).
(eshell-parse-command, eshell-do-pipelines)
(eshell-do-pipelines-synchronously, eshell--invoke-command-directly-p):
Remove handle stealing.
(eshell-structure-basic-command, eshell-do-command)
(eshell-lisp-command): Remove 'eshell-close-handles'.
(eshell-protect): Make obsolete.
(eshell-rewrite-for-command, eshell-rewrite-while-command)
(eshell-rewrite-if-command, (eshell-parse-pipeline): Remove
'eshell-protect'.

* lisp/eshell/esh-io.el (eshell-duplicate-handles): Make STEAL-P
obsolete.

* lisp/eshell/esh-proc.el (eshell-gather-process-output): Call
'eshell-protect-handles' one more time.  Remove 'eshell-close-handles'.

* lisp/eshell/esh-var.el (eshell-parse-variable-ref): Reimplement
$&lt;COMMAND&gt; form using 'eshell-with-handles'.

* test/lisp/eshell/esh-cmd-tests.el
(esh-cmd-test/command-not-found/pipeline): New test.

* test/lisp/eshell/em-tramp-tests.el
(em-tramp-test/should-replace-command): Adjust check for
'eshell-with-copied-handles'.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
See bug#72220.

* lisp/eshell/esh-cmd.el (eshell-with-handles): New macro...
(eshell-commands): ... use it.
(eshell-with-copied-handles): Remove STEAL-P and allow multiple body
forms (this is an incompatible change, but the macro is currently
internal despite the name).
(eshell-parse-command, eshell-do-pipelines)
(eshell-do-pipelines-synchronously, eshell--invoke-command-directly-p):
Remove handle stealing.
(eshell-structure-basic-command, eshell-do-command)
(eshell-lisp-command): Remove 'eshell-close-handles'.
(eshell-protect): Make obsolete.
(eshell-rewrite-for-command, eshell-rewrite-while-command)
(eshell-rewrite-if-command, (eshell-parse-pipeline): Remove
'eshell-protect'.

* lisp/eshell/esh-io.el (eshell-duplicate-handles): Make STEAL-P
obsolete.

* lisp/eshell/esh-proc.el (eshell-gather-process-output): Call
'eshell-protect-handles' one more time.  Remove 'eshell-close-handles'.

* lisp/eshell/esh-var.el (eshell-parse-variable-ref): Reimplement
$&lt;COMMAND&gt; form using 'eshell-with-handles'.

* test/lisp/eshell/esh-cmd-tests.el
(esh-cmd-test/command-not-found/pipeline): New test.

* test/lisp/eshell/em-tramp-tests.el
(em-tramp-test/should-replace-command): Adjust check for
'eshell-with-copied-handles'.
</pre>
</div>
</content>
</entry>
<entry>
<title>Don't set exit info in Eshell if the command is being piped elsewhere</title>
<updated>2024-07-19T18:22:34+00:00</updated>
<author>
<name>Jim Porter</name>
</author>
<published>2024-07-19T16:34:03+00:00</published>
<link rel='alternate' type='text/html' href='https://jason.zzq.org/git/emacs/commit/?id=b7893e73878df83043e05dc8cb811971c0e99f03'/>
<id>b7893e73878df83043e05dc8cb811971c0e99f03</id>
<content type='text'>
Previously, the exit info in Eshell was that of the last command that
finished, rather than the last command in a pipeline.

* lisp/eshell/esh-cmd.el (eshell-exec-lisp)
(eshell-lisp-command): Check whether the command is being piped.

* lisp/eshell/esh-proc.el (eshell-gather-process-output): Record whether
the command is being piped...
(eshell-sentinel): ... and do the right thing with that info.

* test/lisp/eshell/esh-proc-tests.el
(esh-proc-test/sigpipe-exits-process): Check the exit status to ensure
we don't report the first process's SIGPIPE exit.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Previously, the exit info in Eshell was that of the last command that
finished, rather than the last command in a pipeline.

* lisp/eshell/esh-cmd.el (eshell-exec-lisp)
(eshell-lisp-command): Check whether the command is being piped.

* lisp/eshell/esh-proc.el (eshell-gather-process-output): Record whether
the command is being piped...
(eshell-sentinel): ... and do the right thing with that info.

* test/lisp/eshell/esh-proc-tests.el
(esh-proc-test/sigpipe-exits-process): Check the exit status to ensure
we don't report the first process's SIGPIPE exit.
</pre>
</div>
</content>
</entry>
<entry>
<title>Improve implementation of built-in Eshell "kill" command</title>
<updated>2024-07-18T19:28:33+00:00</updated>
<author>
<name>Jim Porter</name>
</author>
<published>2024-07-18T18:43:34+00:00</published>
<link rel='alternate' type='text/html' href='https://jason.zzq.org/git/emacs/commit/?id=259f4613bdea27abf330b58a9683ca4a9e936777'/>
<id>259f4613bdea27abf330b58a9683ca4a9e936777</id>
<content type='text'>
* lisp/eshell/esh-proc.el (eshell/kill): Fix handling of commands like
"kill 123".  Use REMOTE when signalling PIDs in remote directories.
Signal using process objects when possible.  Report errors when failing
to signal.

* test/lisp/eshell/esh-proc-tests.el (esh-proc-test/kill/process-id)
(esh-proc-test/kill/process-object): New tests (bug#72013).
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* lisp/eshell/esh-proc.el (eshell/kill): Fix handling of commands like
"kill 123".  Use REMOTE when signalling PIDs in remote directories.
Signal using process objects when possible.  Report errors when failing
to signal.

* test/lisp/eshell/esh-proc-tests.el (esh-proc-test/kill/process-id)
(esh-proc-test/kill/process-object): New tests (bug#72013).
</pre>
</div>
</content>
</entry>
<entry>
<title>Improve handling of deferrable Eshell commands</title>
<updated>2024-07-18T18:10:04+00:00</updated>
<author>
<name>Jim Porter</name>
</author>
<published>2024-07-17T05:07:33+00:00</published>
<link rel='alternate' type='text/html' href='https://jason.zzq.org/git/emacs/commit/?id=1550213613b397da6e879cc0d00ede916f6c62cc'/>
<id>1550213613b397da6e879cc0d00ede916f6c62cc</id>
<content type='text'>
Now, we use the 'eshell-deferrable' wrapper to wrap a form that returns
a process (or list thereof).  This improves upon the old method, which
failed to handle 'eshell-replace-command' correctly.  In that case,
Eshell would fail to unmark commands as deferrable when necessary
(e.g. for commands in pipelines).

* lisp/eshell/esh-cmd.el (eshell-deferrable-commands): Make into a
defvar.
(eshell-deferrable): New function...
(eshell-structure-basic-command): ... use it.
(eshell-trap-errors): Rename to...
(eshell-do-command): ... this, and use 'eshell-deferrable'.  Update
callers.
(eshell--unmark-deferrable): Remove.  Update callers.
(eshell-execute-pipeline): Remove 'eshell-process-identity'.
(eshell-process-identity, eshell-named-command*, eshell-lisp-command*):
Make obsolete.

* test/lisp/eshell/esh-cmd-tests.el (eshell-test-replace-command): New
function.
(esh-cmd-test/pipeline/replace-command): New test.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Now, we use the 'eshell-deferrable' wrapper to wrap a form that returns
a process (or list thereof).  This improves upon the old method, which
failed to handle 'eshell-replace-command' correctly.  In that case,
Eshell would fail to unmark commands as deferrable when necessary
(e.g. for commands in pipelines).

* lisp/eshell/esh-cmd.el (eshell-deferrable-commands): Make into a
defvar.
(eshell-deferrable): New function...
(eshell-structure-basic-command): ... use it.
(eshell-trap-errors): Rename to...
(eshell-do-command): ... this, and use 'eshell-deferrable'.  Update
callers.
(eshell--unmark-deferrable): Remove.  Update callers.
(eshell-execute-pipeline): Remove 'eshell-process-identity'.
(eshell-process-identity, eshell-named-command*, eshell-lisp-command*):
Make obsolete.

* test/lisp/eshell/esh-cmd-tests.el (eshell-test-replace-command): New
function.
(esh-cmd-test/pipeline/replace-command): New test.
</pre>
</div>
</content>
</entry>
<entry>
<title>Merge from savannah/emacs-30</title>
<updated>2024-07-12T04:15:50+00:00</updated>
<author>
<name>Po Lu</name>
</author>
<published>2024-07-12T04:15:50+00:00</published>
<link rel='alternate' type='text/html' href='https://jason.zzq.org/git/emacs/commit/?id=38fa3e9350134fb69655e1e9b8e6d95a2dbcf3db'/>
<id>38fa3e9350134fb69655e1e9b8e6d95a2dbcf3db</id>
<content type='text'>
a5ef9e25680 Document means of executing Emacs from unrelated Android ...
0de0056fd6b Don't emit a prompt in Eshell when a background command i...
ec1e300a215 Fix reference from buffer-stale-function docstring
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
a5ef9e25680 Document means of executing Emacs from unrelated Android ...
0de0056fd6b Don't emit a prompt in Eshell when a background command i...
ec1e300a215 Fix reference from buffer-stale-function docstring
</pre>
</div>
</content>
</entry>
<entry>
<title>Don't emit a prompt in Eshell when a background command is killed</title>
<updated>2024-07-11T23:39:35+00:00</updated>
<author>
<name>Jim Porter</name>
</author>
<published>2024-07-09T17:45:35+00:00</published>
<link rel='alternate' type='text/html' href='https://jason.zzq.org/git/emacs/commit/?id=0de0056fd6b3b70dde54884db5d9ffc013c49efc'/>
<id>0de0056fd6b3b70dde54884db5d9ffc013c49efc</id>
<content type='text'>
* lisp/eshell/esh-cmd.el (eshell-resume-command): Check for
background-ness before resetting the prompt.

* test/lisp/eshell/esh-cmd-tests.el
(esh-cmd-test/background/simple-command): Make the regexp a bit
stricter.
(esh-cmd-test/background/kill): New test.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* lisp/eshell/esh-cmd.el (eshell-resume-command): Check for
background-ness before resetting the prompt.

* test/lisp/eshell/esh-cmd-tests.el
(esh-cmd-test/background/simple-command): Make the regexp a bit
stricter.
(esh-cmd-test/background/kill): New test.
</pre>
</div>
</content>
</entry>
<entry>
<title>Allow using multiple buffers in 'eshell-command'</title>
<updated>2024-07-06T02:40:29+00:00</updated>
<author>
<name>Thierry Volpiatto</name>
</author>
<published>2024-06-19T10:02:59+00:00</published>
<link rel='alternate' type='text/html' href='https://jason.zzq.org/git/emacs/commit/?id=7f631a3e2aca97e95b8659c902c25ab21f084e08'/>
<id>7f631a3e2aca97e95b8659c902c25ab21f084e08</id>
<content type='text'>
Provide the same functionality as 'async-shell-command-buffer' but for
'eshell-command'.

Co-Authored-By: Jim Porter &lt;jporterbugs@gmail.com&gt;

* lisp/eshell/eshell.el (eshell-command-async-buffer): New option...
(eshell-command): ... use it.

* lisp/eshell/esh-proc.el (eshell-sentinel): Check for buffer liveness
in 'finish-io'.

* test/lisp/eshell/eshell-tests.el
(eshell-test/eshell-command/output-buffer/async-kill): New test.

* etc/NEWS: Announce this change (bug#71554).
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Provide the same functionality as 'async-shell-command-buffer' but for
'eshell-command'.

Co-Authored-By: Jim Porter &lt;jporterbugs@gmail.com&gt;

* lisp/eshell/eshell.el (eshell-command-async-buffer): New option...
(eshell-command): ... use it.

* lisp/eshell/esh-proc.el (eshell-sentinel): Check for buffer liveness
in 'finish-io'.

* test/lisp/eshell/eshell-tests.el
(eshell-test/eshell-command/output-buffer/async-kill): New test.

* etc/NEWS: Announce this change (bug#71554).
</pre>
</div>
</content>
</entry>
</feed>
