GNU bug report logs - #50209
27.2; eshell-command not working async

Previous Next

Package: emacs;

Reported by: Thierry Volpiatto <thievol <at> posteo.net>

Date: Thu, 26 Aug 2021 09:30:01 UTC

Severity: normal

Tags: moreinfo

Found in version 27.2

Fixed in version 28.1

Done: Lars Ingebrigtsen <larsi <at> gnus.org>

Bug is archived. No further changes may be made.

To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 50209 in the body.
You can then email your comments to 50209 AT debbugs.gnu.org in the normal way.

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#50209; Package emacs. (Thu, 26 Aug 2021 09:30:01 GMT) Full text and rfc822 format available.

Acknowledgement sent to Thierry Volpiatto <thievol <at> posteo.net>:
New bug report received and forwarded. Copy sent to bug-gnu-emacs <at> gnu.org. (Thu, 26 Aug 2021 09:30:01 GMT) Full text and rfc822 format available.

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

From: Thierry Volpiatto <thievol <at> posteo.net>
To: bug-gnu-emacs <at> gnu.org
Subject: 27.2; eshell-command not working async
Date: Thu, 26 Aug 2021 09:20:47 +0000
When running a command in eshell ending with "&" the command should not
block emacs, it should run asynchronously.
It seems it is broken since 2005:

  ;; 6b6f91b357f6fe2f1e0d72f046a1b8d8a2d6d8c3
  ;; Author:     John Wiegley <johnw <at> newartisans.com>
  ;; AuthorDate: Fri May 27 02:57:18 2005 +0000
  ;; Commit:     John Wiegley <johnw <at> newartisans.com>
  ;; CommitDate: Fri May 27 02:57:18 2005 +0000

To allow my eshell aliases ending with "&" working in helm-find-files I
use this advice:

    (defun helm--advice-eshell-eval-command (command &optional input)
      "Fix return value when command ends with \"&\"."
      ;; Fix this emacs commit which is plain wrong as it returns
      ;; either nil or an error (double because format spec doesn't
      ;; always match specifier) whereas it should return either a
      ;; single element (CAR DELIM) or DELIM itself if the car of
      ;; DELIM is a process.
      ;; This prevent running eshell-command async when needed i.e. when
      ;; command ends with "&".
      ;;
      ;; 6b6f91b357f6fe2f1e0d72f046a1b8d8a2d6d8c3
      ;; Author:     John Wiegley <johnw <at> newartisans.com>
      ;; AuthorDate: Fri May 27 02:57:18 2005 +0000
      ;; Commit:     John Wiegley <johnw <at> newartisans.com>
      ;; CommitDate: Fri May 27 02:57:18 2005 +0000
      (if eshell-current-command
          ;; we can just stick the new command at the end of the current
          ;; one, and everything will happen as it should
          (setcdr (last (cdr eshell-current-command))
    	      (list `(let ((here (and (eobp) (point))))
                           ,(and input
                                 `(insert-and-inherit ,(concat input "\n")))
                           (if here
                               (eshell-update-markers here))
                           (eshell-do-eval ',command))))
        (and eshell-debug-command
             (with-current-buffer (get-buffer-create "*eshell last cmd*")
               (erase-buffer)
               (insert "command: \"" input "\"\n")))
        (setq eshell-current-command command)
        (let* ((delim (catch 'eshell-incomplete
    		    (eshell-resume-eval)))
               (val (car-safe delim)))
          ;; If the return value of `eshell-resume-eval' is wrapped in a
          ;; list, it indicates that the command was run asynchronously.
          ;; In that case, unwrap the value before checking the delimiter
          ;; value.
          (if (and val
                   (not (processp val))
                   (not (eq val t)))
              (error "Unmatched delimiter: %S" val)
            ;; Eshell-command expect a list like (<process>) to know if the
            ;; command should be async or not.
            (or (and (processp val) delim) val)))))



In GNU Emacs 27.2 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.22.30, cairo version 1.15.10)
 of 2021-03-25 built on IPadS340
Windowing system distributor 'The X.Org Foundation', version 11.0.12008000
System Description: Linux Mint 19.3

Recent messages:
[perl]+ Done (/usr/bin/perl -w /usr/bin/aunpack nyxt-config-master.zip)
previous-line: Beginning of buffer [9 times]
[mu4e] Retrieving mail...done
[mu4e] Indexing... processed 7, updated 7
[mu4e] Indexing completed; processed 7, updated 7, cleaned-up 0
[mu4e] Found 1 matching message
Auto-saving...done
Mark set
Auto-saving...done
Mark set [4 times]

Configured using:
 'configure CFLAGS=-O8 --without-dbus --without-gconf
 --without-gsettings --with-mailutils --with-cairo'

Configured features:
XPM JPEG TIFF GIF PNG RSVG CAIRO SOUND GPM GLIB NOTIFY INOTIFY ACL
LIBSELINUX GNUTLS LIBXML2 FREETYPE HARFBUZZ M17N_FLT LIBOTF ZLIB
TOOLKIT_SCROLL_BARS GTK3 X11 XDBE XIM MODULES THREADS LIBSYSTEMD JSON
PDUMPER LCMS2 GMP

Important settings:
  value of $LANG: fr_FR.UTF-8
  locale-coding-system: utf-8-unix

Major mode: Elisp

Minor modes in effect:
  bug-reference-prog-mode: t
  global-undo-tree-mode: t
  undo-tree-mode: t
  global-ligature-mode: t
  ligature-mode: t
  psession-mode: t
  psession-savehist-mode: t
  global-git-gutter-mode: t
  git-gutter-mode: t
  display-time-mode: t
  winner-mode: t
  show-paren-mode: t
  helm-epa-mode: t
  helm-descbinds-mode: t
  helm-adaptive-mode: t
  helm-mode: t
  shell-dirtrack-mode: t
  helm-popup-tip-mode: t
  async-bytecomp-package-mode: t
  dired-async-mode: t
  minibuffer-depth-indicate-mode: t
  override-global-mode: t
  tooltip-mode: t
  global-eldoc-mode: t
  eldoc-mode: t
  mouse-wheel-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  column-number-mode: t
  line-number-mode: t
  transient-mark-mode: t

Load-path shadows:
/home/thierry/.emacs.d/elpa/magit-20210822.529/magit-section-pkg hides /home/thierry/.emacs.d/elpa/magit-section-20210819.1119/magit-section-pkg
/home/thierry/.emacs.d/elpa/async-20210823.528/async-bytecomp hides /usr/local/share/emacs/site-lisp/emacs-async/async-bytecomp
/home/thierry/.emacs.d/elpa/async-20210823.528/async hides /usr/local/share/emacs/site-lisp/emacs-async/async
/home/thierry/.emacs.d/elpa/async-20210823.528/async-pkg hides /usr/local/share/emacs/site-lisp/emacs-async/async-pkg
/home/thierry/.emacs.d/elpa/async-20210823.528/smtpmail-async hides /usr/local/share/emacs/site-lisp/emacs-async/smtpmail-async
/home/thierry/.emacs.d/elpa/async-20210823.528/dired-async hides /usr/local/share/emacs/site-lisp/emacs-async/dired-async
/home/thierry/.emacs.d/elpa/async-20210823.528/async-autoloads hides /usr/local/share/emacs/site-lisp/emacs-async/async-autoloads
/home/thierry/.emacs.d/elpa/seq-2.22/seq hides /usr/local/share/emacs/27.2/lisp/emacs-lisp/seq

Features:
(shadow epa-mail face-remap emacsbug helm-command helm-ls-hg vc-hg
em-unix em-term term disp-table ehelp em-script em-prompt em-ls em-hist
em-pred em-glob em-dirs esh-var em-cmpl em-basic em-banner em-alias
esh-mode helm-dabbrev qp smerge-mode helm-apt sort gnus-cite w3m-form
w3m-symbol w3m timezone w3m-hist w3m-fb bookmark-w3m w3m-ems w3m-favicon
w3m-image tab-line w3m-proc w3m-util mm-archive smiley mail-extr view
addressbook-bookmark mu4e-config org-mu4e mu4e-contrib eshell esh-cmd
esh-ext esh-opt esh-proc esh-io esh-arg esh-module esh-groups esh-util
mu4e-patch mu4e mu4e-org mu4e-main mu4e-view mu4e-view-gnus gnus-art
mm-uu mml2015 mm-view mml-smime smime dig mu4e-view-common mu4e-headers
mu4e-compose mu4e-context mu4e-draft mu4e-actions ido rfc2368 smtpmail
sendmail mu4e-mark mu4e-proc mu4e-utils mu4e-lists mu4e-message
flow-fill hl-line mu4e-vars mu4e-meta helm-x-files helm-for-files
helm-bookmark bookmark pp org-element avl-tree generator ol-eww eww
mm-url url-queue ol-rmail ol-mhe ol-irc ol-info ol-gnus nnir gnus-sum
shr svg dom gnus-group gnus-undo gnus-start gnus-cloud nnimap nnmail
mail-source utf7 netrc nnoo gnus-spec gnus-int gnus-range gnus-win
ol-docview doc-view jka-compr image-mode exif ol-bibtex bibtex ol-bbdb
ol-w3m image-file tramp-archive tramp-gvfs dbus helm-firefox
bug-reference naquadah-theme solar cal-dst holidays hol-loaddefs
tv-utils undo-tree diff rx ligature rainbow-mode color psession frameset
log-view pcvs-util pcmpl-git cl-indent ffap autocrypt-message message
rmc puny rfc822 mml mml-sec mm-decode mm-bodies mm-encode mail-parse
rfc2231 mailabbrev gmm-utils mailheader autocrypt-gnus gnus nnheader
gnus-util rmail rmail-loaddefs rfc2047 rfc2045 text-property-search
mail-utils mm-util mail-prsvr autocrypt-mu4e autocrypt ietf-drums
config-w3m git-gutter mule-util appt diary-lib diary-loaddefs gud
anaconda-mode xref project pythonic f dash s pcomplete-extension
pcmpl-unix pcmpl-gnu iterator wdired dired-extension org-config
ob-gnuplot org-crypt net-utils time pcase all-the-icons
all-the-icons-faces data-material data-weathericons data-octicons
data-fileicons data-faicons data-alltheicons winner w3m-wget wget
thingatpt wget-sysdep autotest-mode autoconf-mode paren woman man ediff
ediff-merg ediff-mult ediff-wind ediff-diff ediff-help ediff-init
ediff-util init-helm helm-fd epa derived epg epg-config helm-epa
helm-misc helm-imenu imenu helm-elisp-package helm-find helm-org org ob
ob-tangle ob-ref ob-lob ob-table ob-exp org-macro org-footnote org-src
ob-comint org-pcomplete org-list org-faces org-entities noutline outline
org-version ob-emacs-lisp ob-core ob-eval org-table ol org-keys
org-compat advice org-macs org-loaddefs cal-menu calendar cal-loaddefs
helm-external helm-net xml url url-proxy url-privacy url-expand
url-methods url-history url-cookie url-domsuf url-util mailcap
isearch-light helm-descbinds cus-edit wid-edit helm-ls-git vc-git
diff-mode vc vc-dispatcher helm-ipython helm-elisp helm-eval edebug
backtrace find-func helm-info python tramp-sh helm-adaptive helm-mode
helm-files filenotify tramp tramp-loaddefs trampver tramp-integration
files-x tramp-compat shell pcomplete parse-time iso8601 time-date
ls-lisp helm-buffers helm-occur helm-tags helm-locate helm-grep
wgrep-helm wgrep grep compile comint ansi-color ring helm-regexp
format-spec helm-utils helm-help helm-types helm-extensions-autoloads
helm-config helm-autoloads helm async-bytecomp helm-global-bindings
helm-easymenu helm-source helm-multi-match helm-lib dired-async
dired-aux dired dired-loaddefs async popup diminish cl-extra help-mode
mb-depth server edmacro kmacro avoid cus-start cus-load use-package
use-package-ensure use-package-delight use-package-diminish
use-package-bind-key bind-key easy-mmode use-package-core info w3m-load
package easymenu browse-url url-handlers url-parse auth-source cl-seq
eieio eieio-core cl-macs eieio-loaddefs password-cache json subr-x map
url-vars seq byte-opt gv bytecomp byte-compile cconv cl-loaddefs cl-lib
tooltip eldoc electric uniquify ediff-hook vc-hooks lisp-float-type
mwheel term/x-win x-win term/common-win x-dnd tool-bar dnd fontset image
regexp-opt fringe tabulated-list replace newcomment text-mode elisp-mode
lisp-mode prog-mode register page tab-bar menu-bar rfn-eshadow isearch
timer select scroll-bar mouse jit-lock font-lock syntax facemenu
font-core term/tty-colors frame minibuffer cl-generic 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 charscript charprop
case-table epa-hook jka-cmpr-hook help simple abbrev obarray
cl-preloaded nadvice loaddefs button faces cus-face macroexp files
text-properties overlay sha1 md5 base64 format env code-pages mule
custom widget hashtable-print-readable backquote threads inotify lcms2
dynamic-setting font-render-setting cairo move-toolbar gtk x-toolkit x
multi-tty make-network-process emacs)

Memory information:
((conses 16 530246 231953)
 (symbols 48 40848 1)
 (strings 32 169294 34500)
 (string-bytes 1 10791227)
 (vectors 16 76495)
 (vector-slots 8 1628858 276768)
 (floats 8 1729 733)
 (intervals 56 5114 2125)
 (buffers 1000 116))
<#secure method=pgpmime mode=sign>

-- 
Thierry




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#50209; Package emacs. (Thu, 26 Aug 2021 14:30:01 GMT) Full text and rfc822 format available.

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

From: Lars Ingebrigtsen <larsi <at> gnus.org>
To: Thierry Volpiatto <thievol <at> posteo.net>
Cc: 50209 <at> debbugs.gnu.org
Subject: Re: bug#50209: 27.2; eshell-command not working async
Date: Thu, 26 Aug 2021 16:28:50 +0200
Thierry Volpiatto <thievol <at> posteo.net> writes:

> When running a command in eshell ending with "&" the command should not
> block emacs, it should run asynchronously.

Do you have a recipe to reproduce?  I tried

emacs -Q
M-x eshell RET
sleep 10 &

and it ran that asynchronously.  

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no




Added tag(s) moreinfo. Request was from Lars Ingebrigtsen <larsi <at> gnus.org> to control <at> debbugs.gnu.org. (Thu, 26 Aug 2021 14:30:02 GMT) Full text and rfc822 format available.

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#50209; Package emacs. (Fri, 27 Aug 2021 05:53:01 GMT) Full text and rfc822 format available.

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

From: Thierry Volpiatto <thievol <at> posteo.net>
To: Lars Ingebrigtsen <larsi <at> gnus.org>
Cc: 50209 <at> debbugs.gnu.org
Subject: Re: bug#50209: 27.2; eshell-command not working async
Date: Fri, 27 Aug 2021 05:46:41 +0000
[Message part 1 (text/plain, inline)]
Lars Ingebrigtsen <larsi <at> gnus.org> writes:

> Thierry Volpiatto <thievol <at> posteo.net> writes:
>
>> When running a command in eshell ending with "&" the command should not
>> block emacs, it should run asynchronously.
>
> Do you have a recipe to reproduce?  I tried
>
> emacs -Q
> M-x eshell RET
> sleep 10 &
>
> and it ran that asynchronously.  

Yes, that's work, now do:

M-x eshell-command
sleep 10 &

Debugger entered--Lisp error: (error "Format specifier doesn’t match argument type")
  format-message("Unmatched delimiter: %c" #<process sleep>)
  apply(format-message ("Unmatched delimiter: %c" #<process sleep>))
  error("Unmatched delimiter: %c" #<process sleep>)
  eshell-eval-command((let ((eshell-current-handles '[nil (t . 1) (t . 1)]) eshell-current-subjob-p) (let ((eshell-this-command-hook '(ignore))) (condition-case err (eshell-do-eval '(prog1 '... '...) nil) ((debug error) (mapc #'funcall eshell-this-command-hook) (eshell-errorn (error-message-string err)) (eshell-close-handles 1))))))
  eshell-command()
  funcall-interactively(eshell-command)
  call-interactively(eshell-command record nil)
  command-execute(eshell-command record)
  execute-extended-command(nil "eshell-command" "eshell-comm")
  funcall-interactively(execute-extended-command nil "eshell-command" "eshell-comm")
  call-interactively(execute-extended-command nil nil)
  command-execute(execute-extended-command)

Sleep is later executed, if you wait 10s you have the result, but the
error prevent running properly the command programatically.

-- 
Thierry
[signature.asc (application/pgp-signature, inline)]

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#50209; Package emacs. (Fri, 27 Aug 2021 15:03:02 GMT) Full text and rfc822 format available.

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

From: Lars Ingebrigtsen <larsi <at> gnus.org>
To: Thierry Volpiatto <thievol <at> posteo.net>
Cc: 50209 <at> debbugs.gnu.org
Subject: Re: bug#50209: 27.2; eshell-command not working async
Date: Fri, 27 Aug 2021 17:01:55 +0200
Thierry Volpiatto <thievol <at> posteo.net> writes:

> Yes, that's work, now do:
>
> M-x eshell-command
> sleep 10 &
>
> Debugger entered--Lisp error: (error "Format specifier doesn’t match
> argument type")
>   format-message("Unmatched delimiter: %c" #<process sleep>)
>   apply(format-message ("Unmatched delimiter: %c" #<process sleep>))
>   error("Unmatched delimiter: %c" #<process sleep>)

Oh, right -- the eshell-command command, not commands in eshell.  :-)

Yes, I'm also getting that error, and your version of the function fixes
it.  So I've now installed that in Emacs 28.

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no




bug marked as fixed in version 28.1, send any further explanations to 50209 <at> debbugs.gnu.org and Thierry Volpiatto <thievol <at> posteo.net> Request was from Lars Ingebrigtsen <larsi <at> gnus.org> to control <at> debbugs.gnu.org. (Fri, 27 Aug 2021 15:03:02 GMT) Full text and rfc822 format available.

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#50209; Package emacs. (Fri, 27 Aug 2021 16:02:02 GMT) Full text and rfc822 format available.

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

From: Thierry Volpiatto <thievol <at> posteo.net>
To: Lars Ingebrigtsen <larsi <at> gnus.org>
Cc: 50209 <at> debbugs.gnu.org
Subject: Re: bug#50209: 27.2; eshell-command not working async
Date: Fri, 27 Aug 2021 16:00:39 +0000
[Message part 1 (text/plain, inline)]
Lars Ingebrigtsen <larsi <at> gnus.org> writes:

> Thierry Volpiatto <thievol <at> posteo.net> writes:
>
>> Yes, that's work, now do:
>>
>> M-x eshell-command
>> sleep 10 &
>>
>> Debugger entered--Lisp error: (error "Format specifier doesn’t match
>> argument type")
>>   format-message("Unmatched delimiter: %c" #<process sleep>)
>>   apply(format-message ("Unmatched delimiter: %c" #<process sleep>))
>>   error("Unmatched delimiter: %c" #<process sleep>)
>
> Oh, right -- the eshell-command command, not commands in eshell.  :-)
>
> Yes, I'm also getting that error, and your version of the function fixes
> it.  So I've now installed that in Emacs 28.

Great thanks.

-- 
Thierry
[signature.asc (application/pgp-signature, inline)]

bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Sat, 25 Sep 2021 11:24:04 GMT) Full text and rfc822 format available.

This bug report was last modified 2 years and 207 days ago.

Previous Next


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