GNU bug report logs -
#47299
27.1; emacs --batch on MS-Windows does not immediately display `print'ed lines when invoked outside of the Command Prompt
Previous Next
Reported by: Ioannis Kappas <ioannis.kappas <at> gmail.com>
Date: Sun, 21 Mar 2021 19:46:02 UTC
Severity: normal
Found in version 27.1
Fixed in version 29.1
Done: Lars Ingebrigtsen <larsi <at> gnus.org>
Bug is archived. No further changes may be made.
Full log
Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):
[Message part 1 (text/plain, inline)]
emacs --batch behaves differently on MS-Windows vs. GNU/Linux (at
least) while `print'ing values out, leading to poor user experience
and unexpected behavior.
`print' and its variants (e.g. `prin1' and `princ'), output the printed
representation of an OBJECT passed in as an argument.
A user expects to see `print'ed output from a --batch program as it is
printed out, but output on 'windows-nt when Emacs --batch program is
invoked outside of Command Prompt is only displayed after the
accumulated `print'ed output reaches a certain threshold (4096 bytes)
or the program exits, leading to a poor user experience.
This is unlike the behavior when the program is invoked from the
Command Prompt (output is displayed immediately) or when the program
is invoked from a terminal on 'gnu/linux (output is displayed after a
newline is encountered).
For example, the following is expected to print out immediately a
newline followed by 1 followed by a newline (i.e. "\n1\n"):
: emacs -Q --batch --eval "(progn (princ 1) (sleep-for 5))"
but when invoked from outside the Command Prompt (e.g. M-x shell), the
output is only displayed after 5 seconds (i.e. while the program is
about to exit).
| `system-type' | invoked-from | result |
|---------------+----------------+-----------------|
| 'windows-nt | Command Prompt | immediately |
| 'windows-nt | M-x shell | after 5 seconds |
| 'gnu/linux | terminal | immediately |
| 'gnu/linux | M-x shell | immediately |
Further more, the behavior is even worse when emacs --batch is invoked
programmatically by Emacs itself. If the accumulated `print'ed output
length is relatively small (less than 4096 bytes), no output is
received by the parent Emacs process, unlikely that on 'gnu/linux
where output is received while lines are `print'ed out.
The attached `ert' test demonstrates the above point using `princ',
whereby the parent Emacs process receives the "hi\n" output from the
emacs --batch child process on 'gnu/linux as expected, but it receives
nothing on 'windows-nt.
: emacs -Q --batch -l ert -l batch-print-test.el -f ert-run-tests-batch
| `system-type' | result |
|---------------+-------------|
| 'windows-nt | fail |
| 'gnu/linux | pass |
Analysis with likely fixes to follow.
(This report is similar to bug#46388)
Configured using:
'configure --prefix=/mingw64 --build=x86_64-w64-mingw32 --with-modules
--without-dbus --without-compress-install 'CFLAGS=-march=x86-64
-mtune=generic -O2 -pipe' CPPFLAGS=-D__USE_MINGW_ANSI_STDIO=1
'LDFLAGS=-pipe
-Wl,--dynamicbase,--high-entropy-va,--nxcompat,--default-image-base-high''
[Message part 2 (text/html, inline)]
[batch-print-test.el (application/octet-stream, attachment)]
This bug report was last modified 3 years and 21 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.