From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: tomas@tuxteam.de Newsgroups: gmane.emacs.help Subject: Re: Fun with async processes Date: Tue, 1 Feb 2022 15:31:19 +0100 Message-ID: References: <87leyvyknv.fsf@elite.giraud> <87y22vq85b.fsf@elite.giraud> <87o83q7lzw.fsf@elite.giraud> <87v8xy3d5g.fsf@elite.giraud> Mime-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="o07/EDxKpI4c7f3T" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="31090"; mail-complaints-to="usenet@ciao.gmane.io" Cc: help-gnu-emacs@gnu.org To: Manuel Giraud Original-X-From: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane-mx.org@gnu.org Tue Feb 01 17:23:30 2022 Return-path: Envelope-to: geh-help-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nEvwH-0007sc-TV for geh-help-gnu-emacs@m.gmane-mx.org; Tue, 01 Feb 2022 17:23:29 +0100 Original-Received: from localhost ([::1]:56652 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nEvwG-00082V-Ql for geh-help-gnu-emacs@m.gmane-mx.org; Tue, 01 Feb 2022 11:23:28 -0500 Original-Received: from eggs.gnu.org ([209.51.188.92]:50852) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nEuaE-0007Pt-Js for help-gnu-emacs@gnu.org; Tue, 01 Feb 2022 09:56:39 -0500 Original-Received: from mail.tuxteam.de ([5.199.139.25]:51450) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nEuZl-00026q-21 for help-gnu-emacs@gnu.org; Tue, 01 Feb 2022 09:56:11 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=tuxteam.de; s=mail; h=In-Reply-To:Content-Type:MIME-Version:References:Message-ID:Subject :Cc:To:From:Date:Sender:Reply-To:Content-Transfer-Encoding:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=H/L95OTCv7lZEEfOsfmVtytdoer5r8mQSp9sa9CCKaA=; b=snHWUoFkYzoxM5A+kkrM3Vdyv4 HdgzHpVNwdgBmZDz/MkJEuILdsRXy5XhJNaJfwsvqaJumxqi/nykh2I5c+N9/jZ2wkNkLTChP/G6P sBDCLX8FOK7ZuqBFfpMtN6SMFaKCCMBCjsnor2TxtG1uFn+1n0bDujA4FD0GwB5g8g7qsk/HHDruJ S9t4gmXq8AaU4cmSEy3xeAhwKsZu3G5Q+pyUJOVPW30j1c7XDr6EBGKvtehzRtAudZ6LN5cfWbFgv em0/7iKtCNTQxKVmgwdTn3zM/to+N3XI0qv39F09Z1GEVIOL3i029fLX2/sVSo2p1pVdvY6TscqiA f7rGnJ9g==; Original-Received: from tomas by mail.tuxteam.de with local (Exim 4.94.2) (envelope-from ) id 1nEuBj-00033d-V8; Tue, 01 Feb 2022 15:31:19 +0100 Content-Disposition: inline In-Reply-To: <87v8xy3d5g.fsf@elite.giraud> Received-SPF: pass client-ip=5.199.139.25; envelope-from=tomas@tuxteam.de; helo=mail.tuxteam.de X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: help-gnu-emacs@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Users list for the GNU Emacs text editor List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: "help-gnu-emacs" Xref: news.gmane.io gmane.emacs.help:135628 Archived-At: --o07/EDxKpI4c7f3T Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Tue, Feb 01, 2022 at 02:54:51PM +0100, Manuel Giraud wrote: > tomas@tuxteam.de writes: >=20 > [...] >=20 > > Nice. Many ways to go about that. >=20 > And do you think I could avoid having those defvar? How about hiding stuff in a closure? You'll need to have lexical environments for that: (defun make-sentinel-factory () (let (sentinels (list)) (lambda (tag) (setq sentinels (push tag sentinels)) ; FIXME: fail if already ther= e! (lambda (process event) (when (equal "finished" event) (setq sentinels (delq tag sentinels)) (message "%S is done; still left: %S" tag sentinels) (when (null sentinels) (message "All sentinels done"))))))) =20 (setq make-sentinel (make-sentinel-factory)) =20 (setq s1 (funcall make-sentinel 's1)) (setq s2 (funcall make-sentinel 's2)) (setq s3 (funcall make-sentinel 's3)) =20 (funcall s2 "process" "finished") (funcall s3 "process" "finished") (funcall s1 "process" "finished") Catching errors is left as an exercise to ... Cheers --=20 t --o07/EDxKpI4c7f3T Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iF0EABECAB0WIQRp53liolZD6iXhAoIFyCz1etHaRgUCYflEMQAKCRAFyCz1etHa RkcKAJwPJ/8qT9Q8hMB8nhEKmNSYmeOV2QCdEka+quF3JuTMhKUVLxXLthmV5Dk= =WQgD -----END PGP SIGNATURE----- --o07/EDxKpI4c7f3T--