GNU bug report logs - #79067
31.0.50; Cannot async-shell-command anymore

Previous Next

Package: emacs;

Reported by: Manuel Giraud <manuel <at> ledu-giraud.fr>

Date: Mon, 21 Jul 2025 08:32:01 UTC

Severity: normal

Found in version 31.0.50

To reply to this bug, email your comments to 79067 AT debbugs.gnu.org.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to bug-gnu-emacs <at> gnu.org:
bug#79067; Package emacs. (Mon, 21 Jul 2025 08:32:01 GMT) Full text and rfc822 format available.

Acknowledgement sent to Manuel Giraud <manuel <at> ledu-giraud.fr>:
New bug report received and forwarded. Copy sent to bug-gnu-emacs <at> gnu.org. (Mon, 21 Jul 2025 08:32:01 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Manuel Giraud <manuel <at> ledu-giraud.fr>
To: bug-gnu-emacs <at> gnu.org
Subject: 31.0.50; Cannot async-shell-command anymore
Date: Mon, 21 Jul 2025 10:30:32 +0200
Hi,

From a current build, I can't call `async-shell-command' anymore.  Here
is my recipe:

  - emacs -Q
  - M-& ls <RET>

I get the following error:

shell-command: Asynchronous shell commands cannot output to current buffer


In GNU Emacs 31.0.50 (build 1, x86_64-unknown-openbsd7.7) of 2025-07-21
 built on computer
Repository revision: 59575c32aa1e0d28c1c7113f1ce73cb64cec8e92
Repository branch: master
Windowing system distributor 'The X.Org Foundation', version 11.0.12101018
System Description: OpenBSD computer 7.7 GENERIC.MP#52 amd64

Configured using:
 'configure CC=egcc CPPFLAGS=-I/usr/local/include
 LDFLAGS=-L/usr/local/lib MAKEINFO=gmakeinfo --prefix=/home/manuel/emacs
 --bindir=/home/manuel/bin --with-x-toolkit=no
 --with-toolkit-scroll-bars=no --without-cairo --without-dbus
 --without-gconf --without-gsettings --without-compress-install'

Configured features:
FREETYPE GIF GLIB GMP GNUTLS HARFBUZZ JPEG LCMS2 LIBOTF LIBXML2 M17N_FLT
MODULES NOTIFY KQUEUE OLDXMENU PDUMPER PNG RSVG SQLITE3 THREADS TIFF
TREE_SITTER WEBP X11 XDBE XFT XIM XINERAMA XINPUT2 XPM XRANDR ZLIB

Important settings:
  value of $LC_CTYPE: en_US.UTF-8
  locale-coding-system: utf-8-unix

Major mode: Dired by name

Minor modes in effect:
  gnus-dired-mode: t
  display-time-mode: t
  display-battery-mode: t
  desktop-save-mode: t
  exwm-randr-mode: t
  server-mode: t
  electric-pair-mode: t
  override-global-mode: t
  repeat-mode: t
  global-eldoc-mode: t
  eldoc-mode: t
  show-paren-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  menu-bar-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  blink-cursor-mode: t
  minibuffer-regexp-mode: t
  buffer-read-only: t
  line-number-mode: t
  indent-tabs-mode: t
  transient-mark-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t

Load-path shadows:
/home/manuel/prog/elisp/exwm/exwm hides /home/manuel/.emacs.d/elpa/exwm-0.34/exwm
/home/manuel/prog/elisp/exwm/exwm-xsettings hides /home/manuel/.emacs.d/elpa/exwm-0.34/exwm-xsettings
/home/manuel/prog/elisp/exwm/exwm-xim hides /home/manuel/.emacs.d/elpa/exwm-0.34/exwm-xim
/home/manuel/prog/elisp/exwm/exwm-workspace hides /home/manuel/.emacs.d/elpa/exwm-0.34/exwm-workspace
/home/manuel/prog/elisp/exwm/exwm-randr hides /home/manuel/.emacs.d/elpa/exwm-0.34/exwm-randr
/home/manuel/prog/elisp/exwm/exwm-manage hides /home/manuel/.emacs.d/elpa/exwm-0.34/exwm-manage
/home/manuel/prog/elisp/exwm/exwm-layout hides /home/manuel/.emacs.d/elpa/exwm-0.34/exwm-layout
/home/manuel/prog/elisp/exwm/exwm-input hides /home/manuel/.emacs.d/elpa/exwm-0.34/exwm-input
/home/manuel/prog/elisp/exwm/exwm-floating hides /home/manuel/.emacs.d/elpa/exwm-0.34/exwm-floating
/home/manuel/prog/elisp/exwm/exwm-systemtray hides /home/manuel/.emacs.d/elpa/exwm-0.34/exwm-systemtray
/home/manuel/prog/elisp/exwm/exwm-core hides /home/manuel/.emacs.d/elpa/exwm-0.34/exwm-core
/home/manuel/prog/elisp/exwm/exwm-background hides /home/manuel/.emacs.d/elpa/exwm-0.34/exwm-background
/home/manuel/.emacs.d/elpa/ef-themes-1.10.0/theme-loaddefs hides /home/manuel/emacs/share/emacs/31.0.50/lisp/theme-loaddefs
/home/manuel/.emacs.d/elpa/idlwave-6.5.1/idlwave hides /home/manuel/emacs/share/emacs/31.0.50/lisp/obsolete/idlwave
/home/manuel/.emacs.d/elpa/idlwave-6.5.1/idlw-toolbar hides /home/manuel/emacs/share/emacs/31.0.50/lisp/obsolete/idlw-toolbar
/home/manuel/.emacs.d/elpa/idlwave-6.5.1/idlw-shell hides /home/manuel/emacs/share/emacs/31.0.50/lisp/obsolete/idlw-shell
/home/manuel/.emacs.d/elpa/idlwave-6.5.1/idlw-help hides /home/manuel/emacs/share/emacs/31.0.50/lisp/obsolete/idlw-help
/home/manuel/.emacs.d/elpa/idlwave-6.5.1/idlw-complete-structtag hides /home/manuel/emacs/share/emacs/31.0.50/lisp/obsolete/idlw-complete-structtag

Features:
(shadow sort mail-extr shortdoc comp-common help-fns radix-tree emacsbug
lisp-mnt texinfo texinfo-loaddefs conf-mode emacs-news-mode org-indent
org-agenda flyspell ispell tex-mode compile shell view hi-lock
c++-ts-mode c-ts-mode mhtml-mode css-mode js c-ts-common imenu sgml-mode
facemenu make-mode oc-basic org-element org-persist org-id
org-element-ast inline avl-tree generator ol-eww ol-rmail ol-mhe ol-irc
ol-info ol-gnus nnselect ol-docview doc-view filenotify jka-compr
image-mode exif ol-bibtex bibtex ol-bbdb ol-w3m ol-doi org-link-doi
gnus-icalendar org-capture org-refile org ob ob-tangle ob-ref ob-lob
ob-table ob-exp org-macro org-src ob-comint org-pcomplete pcomplete
comint ansi-osc ansi-color org-list org-footnote org-faces org-entities
noutline outline org-version ob-emacs-lisp ob-core ob-eval org-cycle
org-table ol org-fold org-fold-core org-keys oc org-loaddefs org-compat
org-macs sh-script rx smie treesit executable vc-hg vc-bzr vc-src
vc-sccs vc-svn vc-cvs vc-rcs log-view log-edit add-log pcvs-util
debbugs-browse bug-reference eww vtable mule-util url-queue mm-url
gnus-dired vc-git diff-mode track-changes files-x vc-dir ewoc vc
vc-dispatcher format-spec time battery desktop frameset exwm-randr
xcb-randr exwm exwm-input xcb-keysyms xcb-xkb exwm-manage exwm-floating
xcb-cursor xcb-render exwm-layout exwm-workspace exwm-core xcb-ewmh
xcb-icccm xcb xcb-xproto xcb-types xcb-debug server ef-themes
modus-operandi-tinted-theme modus-themes zone speed-type thingatpt
url-http url-auth url-gw nsm compat ytdious ring mpdired transmission
color calc-bin calc-ext calc calc-loaddefs rect calc-macs supercite regi
ebdb-gnus gnus-msg gnus-art mm-uu mml2015 mm-view mml-smime smime gnutls
dig gnus-sum shr pixel-fill kinsoku url-file svg dom gnus-group
gnus-undo gnus-start gnus-dbus dbus xml gnus-cloud nnimap nnmail
mail-source utf7 nnoo parse-time iso8601 gnus-spec gnus-int gnus-range
gnus-win ebdb-message message yank-media puny rfc822 mml mml-sec epa
derived epg rfc6068 epg-config mm-decode mm-bodies mm-encode mail-parse
rfc2231 gmm-utils mailheader ebdb-mua ebdb-com crm ebdb-format ebdb
mailabbrev eieio-opt speedbar ezimage dframe find-func eieio-base
timezone icalendar gnus nnheader gnus-util text-property-search
time-date range sendmail rfc2047 rfc2045 ietf-drums mm-util mail-prsvr
mail-utils erlang-start idlwave idlwave-menus idlw-menus
idlwave-bindings idlw-bindings idlwave-routine idlw-routine idlwave-scan
idlw-scan idlwave-help idlw-help idlwave-complete idlw-complete
idlwave-variables idlw-variables skeleton cc-mode cc-fonts cc-guess
cc-menus cc-cmds cc-styles cc-align cc-engine cc-vars cc-defs elec-pair
appt diary-lib diary-loaddefs cal-menu calendar cal-loaddefs pcase
dired-x dired-aux dired dired-loaddefs edmacro kmacro
use-package-bind-key bind-key easy-mmode use-package-core repeat
cus-edit pp cus-start cus-load wid-edit debbugs-autoloads ebdb-autoloads
cl-extra help-mode ef-themes-autoloads elpher-autoloads exwm-autoloads
gnuplot-autoloads hyperbole-autoloads kotl-autoloads hact set hhist
idlwave-autoloads notmuch-autoloads osm-autoloads pdf-tools-autoloads
reddigg-autoloads ht-autoloads dash-autoloads promise-autoloads
rust-mode-autoloads info slime-autoloads warnings macrostep-autoloads
speed-type-autoloads sudo-edit-autoloads svg-clock-autoloads
tablist-autoloads transmission-autoloads xelb-autoloads
ytdious-autoloads package browse-url xdg url url-proxy url-privacy
url-expand url-methods url-history url-cookie generate-lisp-file
url-domsuf url-util mailcap url-handlers url-parse auth-source cl-seq
eieio eieio-core cl-macs icons password-cache json subr-x map byte-opt
gv bytecomp byte-compile url-vars cl-loaddefs cl-lib rmc iso-transl
tooltip cconv eldoc paren electric uniquify ediff-hook vc-hooks
lisp-float-type elisp-mode mwheel term/x-win x-win term/common-win x-dnd
touch-screen tool-bar dnd fontset image regexp-opt fringe tabulated-list
replace newcomment text-mode lisp-mode prog-mode register page tab-bar
menu-bar rfn-eshadow isearch easymenu timer select scroll-bar mouse
jit-lock font-lock syntax font-core term/tty-colors frame minibuffer
nadvice seq simple cl-generic indonesian philippine cham georgian
utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao korean
japanese eucjp-ms cp51932 hebrew greek romanian slovak czech european
ethiopic indian cyrillic chinese composite emoji-zwj charscript charprop
case-table epa-hook jka-cmpr-hook help abbrev obarray oclosure
cl-preloaded button loaddefs theme-loaddefs faces cus-face macroexp
files window text-properties overlay sha1 md5 base64 format env
code-pages mule custom widget keymap hashtable-print-readable backquote
threads kqueue lcms2 dynamic-setting font-render-setting xinput2 x
multi-tty move-toolbar make-network-process tty-child-frames emacs)

Memory information:
((conses 16 825915 601162) (symbols 48 50206 2)
 (strings 32 241027 35648) (string-bytes 1 5956291)
 (vectors 16 147594) (vector-slots 8 2090329 43874)
 (floats 8 650 1102) (intervals 56 17196 162) (buffers 1064 122))

-- 
Manuel Giraud




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#79067; Package emacs. (Mon, 21 Jul 2025 09:52:01 GMT) Full text and rfc822 format available.

Message #8 received at 79067 <at> debbugs.gnu.org (full text, mbox):

From: Manuel Giraud <manuel <at> ledu-giraud.fr>
To: 79067 <at> debbugs.gnu.org
Subject: Re: bug#79067: 31.0.50; Cannot async-shell-command anymore
Date: Mon, 21 Jul 2025 11:51:38 +0200
Manuel Giraud <manuel <at> ledu-giraud.fr> writes:

> Hi,
>
>From a current build, I can't call `async-shell-command' anymore.  Here
> is my recipe:
>
>   - emacs -Q
>   - M-& ls <RET>
>
> I get the following error:
>
> shell-command: Asynchronous shell commands cannot output to current
> buffer

I'm not quite sure about the logic at play here but the following patch
fixes my issue:

diff --git a/lisp/simple.el b/lisp/simple.el
index 88886de05c4..f7f059793ca 100644
--- a/lisp/simple.el
+++ b/lisp/simple.el
@@ -4715,7 +4715,8 @@ shell-command
 	;; Output goes in a separate buffer.
 	(if (string-match "[ \t]*&[ \t]*\\'" command)
 	    ;; Command ending with ampersand means asynchronous.
-            (let* ((_ (or (bufferp output-buffer)
+            (let* ((_ (or (null output-buffer)
+                          (bufferp output-buffer)
                           (stringp output-buffer)
                           (error "Asynchronous shell commands cannot output to current buffer")))
                    (buffer (get-buffer-create
-- 
Manuel Giraud




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#79067; Package emacs. (Mon, 21 Jul 2025 10:28:01 GMT) Full text and rfc822 format available.

Message #11 received at 79067 <at> debbugs.gnu.org (full text, mbox):

From: Stephen Berman <stephen.berman <at> gmx.net>
To: Manuel Giraud <manuel <at> ledu-giraud.fr>
Cc: 79067 <at> debbugs.gnu.org
Subject: Re: bug#79067: 31.0.50; Cannot async-shell-command anymore
Date: Mon, 21 Jul 2025 12:27:38 +0200
[Message part 1 (text/plain, inline)]
On Mon, 21 Jul 2025 11:51:38 +0200 Manuel Giraud <manuel <at> ledu-giraud.fr> wrote:

> Manuel Giraud <manuel <at> ledu-giraud.fr> writes:
>
>> Hi,
>>
>>From a current build, I can't call `async-shell-command' anymore.  Here
>> is my recipe:
>>
>>   - emacs -Q
>>   - M-& ls <RET>
>>
>> I get the following error:
>>
>> shell-command: Asynchronous shell commands cannot output to current
>> buffer
>
> I'm not quite sure about the logic at play here but the following patch
> fixes my issue:
>
> diff --git a/lisp/simple.el b/lisp/simple.el
> index 88886de05c4..f7f059793ca 100644
> --- a/lisp/simple.el
> +++ b/lisp/simple.el
> @@ -4715,7 +4715,8 @@ shell-command
>  	;; Output goes in a separate buffer.
>  	(if (string-match "[ \t]*&[ \t]*\\'" command)
>  	    ;; Command ending with ampersand means asynchronous.
> -            (let* ((_ (or (bufferp output-buffer)
> +            (let* ((_ (or (null output-buffer)
> +                          (bufferp output-buffer)
>                            (stringp output-buffer)
>                            (error "Asynchronous shell commands cannot output to current buffer")))
>                     (buffer (get-buffer-create

The commit message of 852009b4f1c9, which added the bufferp and stringp
checks and the error message, says 'Improve error message for "C-u M-!
something &"'.  An alternative is to ignore the prefix argument when the
command is asynchronous, just like `async-shell-command' ignores the
prefix argument:

[Message part 2 (text/x-patch, inline)]
diff --git a/lisp/simple.el b/lisp/simple.el
index 88886de05c4..c64d3e5285b 100644
--- a/lisp/simple.el
+++ b/lisp/simple.el
@@ -4715,9 +4715,12 @@ shell-command
 	;; Output goes in a separate buffer.
 	(if (string-match "[ \t]*&[ \t]*\\'" command)
 	    ;; Command ending with ampersand means asynchronous.
-            (let* ((_ (or (bufferp output-buffer)
-                          (stringp output-buffer)
-                          (error "Asynchronous shell commands cannot output to current buffer")))
+            (let* ((output-buffer (unless (consp output-buffer)
+                                    ;; Output of asynchronous commands
+                                    ;; cannot be inserted into current
+                                    ;; buffer, so if OUTPUT-BUFFER is a
+                                    ;; prefix argument, ignore it.
+                                    output-buffer))
                    (buffer (get-buffer-create
                             (or output-buffer shell-command-buffer-name-async)))
                    (bname (buffer-name buffer))
[Message part 3 (text/plain, inline)]
Steve Berman

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#79067; Package emacs. (Mon, 21 Jul 2025 10:43:02 GMT) Full text and rfc822 format available.

Message #14 received at 79067 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Manuel Giraud <manuel <at> ledu-giraud.fr>
Cc: 79067 <at> debbugs.gnu.org
Subject: Re: bug#79067: 31.0.50; Cannot async-shell-command anymore
Date: Mon, 21 Jul 2025 13:42:16 +0300
> From: Manuel Giraud <manuel <at> ledu-giraud.fr>
> Date: Mon, 21 Jul 2025 10:30:32 +0200
> 
> >From a current build, I can't call `async-shell-command' anymore.  Here
> is my recipe:
> 
>   - emacs -Q
>   - M-& ls <RET>
> 
> I get the following error:
> 
> shell-command: Asynchronous shell commands cannot output to current buffer

Sorry about that, should be fixed now.




This bug report was last modified 2 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.