* bug#50209: 27.2; eshell-command not working async
@ 2021-08-26 9:20 Thierry Volpiatto
2021-08-26 14:28 ` Lars Ingebrigtsen
0 siblings, 1 reply; 5+ messages in thread
From: Thierry Volpiatto @ 2021-08-26 9:20 UTC (permalink / raw)
To: 50209
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@newartisans.com>
;; AuthorDate: Fri May 27 02:57:18 2005 +0000
;; Commit: John Wiegley <johnw@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@newartisans.com>
;; AuthorDate: Fri May 27 02:57:18 2005 +0000
;; Commit: John Wiegley <johnw@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
^ permalink raw reply [flat|nested] 5+ messages in thread
* bug#50209: 27.2; eshell-command not working async
2021-08-26 9:20 bug#50209: 27.2; eshell-command not working async Thierry Volpiatto
@ 2021-08-26 14:28 ` Lars Ingebrigtsen
2021-08-27 5:46 ` Thierry Volpiatto
0 siblings, 1 reply; 5+ messages in thread
From: Lars Ingebrigtsen @ 2021-08-26 14:28 UTC (permalink / raw)
To: Thierry Volpiatto; +Cc: 50209
Thierry Volpiatto <thievol@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
^ permalink raw reply [flat|nested] 5+ messages in thread
* bug#50209: 27.2; eshell-command not working async
2021-08-26 14:28 ` Lars Ingebrigtsen
@ 2021-08-27 5:46 ` Thierry Volpiatto
2021-08-27 15:01 ` Lars Ingebrigtsen
0 siblings, 1 reply; 5+ messages in thread
From: Thierry Volpiatto @ 2021-08-27 5:46 UTC (permalink / raw)
To: Lars Ingebrigtsen; +Cc: 50209
[-- Attachment #1: Type: text/plain, Size: 1588 bytes --]
Lars Ingebrigtsen <larsi@gnus.org> writes:
> Thierry Volpiatto <thievol@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
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 686 bytes --]
^ permalink raw reply [flat|nested] 5+ messages in thread
* bug#50209: 27.2; eshell-command not working async
2021-08-27 5:46 ` Thierry Volpiatto
@ 2021-08-27 15:01 ` Lars Ingebrigtsen
2021-08-27 16:00 ` Thierry Volpiatto
0 siblings, 1 reply; 5+ messages in thread
From: Lars Ingebrigtsen @ 2021-08-27 15:01 UTC (permalink / raw)
To: Thierry Volpiatto; +Cc: 50209
Thierry Volpiatto <thievol@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
^ permalink raw reply [flat|nested] 5+ messages in thread
* bug#50209: 27.2; eshell-command not working async
2021-08-27 15:01 ` Lars Ingebrigtsen
@ 2021-08-27 16:00 ` Thierry Volpiatto
0 siblings, 0 replies; 5+ messages in thread
From: Thierry Volpiatto @ 2021-08-27 16:00 UTC (permalink / raw)
To: Lars Ingebrigtsen; +Cc: 50209
[-- Attachment #1: Type: text/plain, Size: 702 bytes --]
Lars Ingebrigtsen <larsi@gnus.org> writes:
> Thierry Volpiatto <thievol@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
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 686 bytes --]
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2021-08-27 16:00 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-08-26 9:20 bug#50209: 27.2; eshell-command not working async Thierry Volpiatto
2021-08-26 14:28 ` Lars Ingebrigtsen
2021-08-27 5:46 ` Thierry Volpiatto
2021-08-27 15:01 ` Lars Ingebrigtsen
2021-08-27 16:00 ` Thierry Volpiatto
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).