From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Shane Mulligan Newsgroups: gmane.emacs.bugs Subject: bug#48500: Fwd: bug#48500: 28.0.50; url-retrieve-synchronously exits abnormally due to pending keyboard input from terminal Date: Thu, 20 May 2021 01:08:08 +1200 Message-ID: References: <87pmxo4kiu.wl-mullikine@gmail.com> <8335ukrsj3.fsf@gnu.org> <83sg2kq8yc.fsf@gnu.org> <835yzfq6lm.fsf@gnu.org> Mime-Version: 1.0 Content-Type: multipart/alternative; boundary="00000000000049e30e05c2ae8501" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="29478"; mail-complaints-to="usenet@ciao.gmane.io" To: 48500@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Wed May 19 15:44:38 2021 Return-path: Envelope-to: geb-bug-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 1ljMV3-0007P5-FW for geb-bug-gnu-emacs@m.gmane-mx.org; Wed, 19 May 2021 15:44:37 +0200 Original-Received: from localhost ([::1]:36506 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ljMV2-00041m-I9 for geb-bug-gnu-emacs@m.gmane-mx.org; Wed, 19 May 2021 09:44:36 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:37094) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ljLwc-0000iK-8q for bug-gnu-emacs@gnu.org; Wed, 19 May 2021 09:09:02 -0400 Original-Received: from debbugs.gnu.org ([209.51.188.43]:46834) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1ljLwb-0002Po-Up for bug-gnu-emacs@gnu.org; Wed, 19 May 2021 09:09:01 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1ljLwb-0000S1-PU for bug-gnu-emacs@gnu.org; Wed, 19 May 2021 09:09:01 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Shane Mulligan Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Wed, 19 May 2021 13:09:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 48500 X-GNU-PR-Package: emacs Original-Received: via spool by 48500-submit@debbugs.gnu.org id=B48500.16214297091677 (code B ref 48500); Wed, 19 May 2021 13:09:01 +0000 Original-Received: (at 48500) by debbugs.gnu.org; 19 May 2021 13:08:29 +0000 Original-Received: from localhost ([127.0.0.1]:58373 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ljLw4-0000Qz-ET for submit@debbugs.gnu.org; Wed, 19 May 2021 09:08:29 -0400 Original-Received: from mail-yb1-f177.google.com ([209.85.219.177]:34768) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ljLw1-0000Qk-Kv for 48500@debbugs.gnu.org; Wed, 19 May 2021 09:08:27 -0400 Original-Received: by mail-yb1-f177.google.com with SMTP id w1so6667033ybt.1 for <48500@debbugs.gnu.org>; Wed, 19 May 2021 06:08:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to; bh=TTive+jFYqu8zLEo2TvLkJsEkwheB2wLlSdquRGAwxc=; b=R1K/2/RrIrdUgGx7jCWp4vL7OH2KAaFTz/96mOqDTsVftn0Hi9VQnBXAFFeAgjwAkm d2TAXFTINS8uk3Oy7kM4AWCFKiV0dgw8Y1czzWmAcx0HDNUeQgG5ta3K9c9NQWKavP/m fKLVkbZSET16ExBi5VgBEGrviN6mIzm3AuVeVdLOLrx0CwZ3sQP8HoTkM4UAlV1tPaUY dZna4Bx+N+7BGsbmxFBB34dqRT7kPebm++nEEdTBHJRS+DK5VPLmKlSQvJzcR/WssYcY kZdwISh91NB1h/GbxhEsBRv02ubvg7AzE4NtmHFQ0dlvJaM+cBSahNvXWShJaV4i2kPS Zqmg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to; bh=TTive+jFYqu8zLEo2TvLkJsEkwheB2wLlSdquRGAwxc=; b=VCELG977ETb8r2D20tMZJ49MVq4fOe1tBlTVBTSUKpwrhId4rU+6tQIZ0Z+b1wsXBf v8FwofNtmqE2XsxF9YRrsCA//EZTUyAtu3PWhTzZG89f+zKNXzJ5Ynqd5aBhuny68xTW GOEAFosxT9JBMBwTTRSlSmJGuTqEeGb6628hv7jITKEt0h7QPPeTT49unFRVtm7qjJFr cEGhqfx2rDEl3rCJx3lzhGBQZw5O+PxxZerqzgYbf4QmbIFiBtbsxA0FV/9btcdHSbU/ hvzzWgibV1vp7//Rb65Xrzj+Pr0Lvi/z51BQ+37YJwIo+5YkrNJgt9+pzNVfl9JNCnr0 nDIA== X-Gm-Message-State: AOAM532SdNC82fSCOAK2lkazrNJTolq08cDMhfjY7hhlRPzU1nCuHCRR gEwFrV9DdqXasUZ8caD7mAvn4U2jrvyM3aww7Lw8kWscTA== X-Google-Smtp-Source: ABdhPJwdf9l6Zh1ff+R3cvvE3d8APJ1Yn7lzyUF4jI7HRDxQhumqHj7DVzHbXJFmqSnMKk8aE6PgzRDuJQwgg4TfaTs= X-Received: by 2002:a25:d8ca:: with SMTP id p193mr16317590ybg.208.1621429699846; Wed, 19 May 2021 06:08:19 -0700 (PDT) In-Reply-To: X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: "bug-gnu-emacs" Xref: news.gmane.io gmane.emacs.bugs:206885 Archived-At: --00000000000049e30e05c2ae8501 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Shane Mulligan How to contact me: =F0=9F=87=A6=F0=9F=87=BA 00 61 421 641 250 =F0=9F=87=B3=F0=9F=87=BF 00 64 21 1462 759 <+64-21-1462-759> mullikine@gmail.com ---------- Forwarded message --------- From: Shane Mulligan Date: Thu, May 20, 2021 at 1:05 AM Subject: Re: bug#48500: 28.0.50; url-retrieve-synchronously exits abnormally due to pending keyboard input from terminal To: Eli Zaretskii Hey Eli, I'm not sure where the quit is being generated but I will look into it. Here are my insights. ** Original code https://github.com/emacs-mirror/emacs/blob/HEAD/lisp/url/url.el 292 ;; We used to use `sit-for' here, but in some cases it wouldn't 293 ;; work because apparently pending keyboard input would always 294 ;; interrupt it before it got a chance to handle process input. 295 ;; `sleep-for' was tried but it lead to other forms of 296 ;; hanging. --Stef 297 (unless (or (with-local-quit 298 (accept-process-output proc 1)) 299 (null proc)) https://github.com/emacs-mirror/emacs/blob/HEAD/src/keyboard.c 10395 DEFUN ("input-pending-p", Finput_pending_p, Sinput_pending_p, 0, 1, 0, 10396 doc: /* Return t if command input is currently available with no wait. 10397 Actually, the value is nil only if we can be sure that no input is available; 10398 if there is a doubt, the value is t. ** I discovered that placing while-no-input here prevented quit from generating elsewhere But then the overall function `url-retrieve-synchronously` would hang. 112 (unless (or 113 (while-no-input 114 (with-local-quit 115 (accept-process-output proc 1))) 116 (null proc)) ** Before discovering the 'fix' which is running keyboard-quit early (shown below), I avoided the hang by reading the key. But reading and discarding the key wasn't a solution. I found that by doing the keyboard quit shown below instead of reading the key, the keyboard input is preserved and somehow (unsure how), the pending input is pacified `accept-process-output` is 'safe' now to run. 96 (with-local-quit 97 (if (input-pending-p) 98 (progn 99 (setq counter (1+ counter)) 100 ;; (append-to-file (concat (char-to-string (read-key)) "\n")) 101 (my-url-log (concat ">input pending" (str counter))) 102 (if (> counter 20) 103 (progn 104 ;; (my-url-log (concat "QUIT" (str counter))) 105 ;; (keyboard-quit)) 106 ;; This discards the input 107 (read-key-sequence-vector nil nil t) 108 (never 109 (let ((k (read-key))) 110 (my-url-log (concat "discarding: " (char-to-string k))))) 111 )))) 112 (unless (or - 113 (while-no-input 114 (with-local-quit =3D 115 (accept-process-output proc 1))) 116 (null procj)) ** Clues *** Back in 2006, it was advised in a different place to use input-pending-p instead of sit-for. 6466 2006-09-12 Kim F. Storm 6467 6468 * simple.el (next-error-highlight, next-error-highlight-no-select): 6469 Fix spelling error. 6470 6471 * subr.el (sit-for): Rework to use input-pending-p and cond. 6472 Return nil input is pending on entry also for SECONDS <=3D 0= . 6473 (while-no-input): Use input-pending-p instead of sit-for. *** Quitting disabled when input-pendind-p is t https://www.gnu.org/software/emacs/manual/html_node/elisp/Idle-Timers.html https://github.com/emacs-mirror/emacs/blob/567c31121fdef6bdc8b645999a6ca1d9= 94378c89/lisp/play/zone.el#L50 49 ;; window. If the function loops, it *must* periodically check and 50 ;; halt if `input-pending-p' is t (because quitting is disabled when 51 ;; Emacs idle timers are run). Shane Mulligan How to contact me: =F0=9F=87=A6=F0=9F=87=BA 00 61 421 641 250 =F0=9F=87=B3=F0=9F=87=BF 00 64 21 1462 759 <+64-21-1462-759> mullikine@gmail.com On Wed, May 19, 2021 at 11:57 PM Eli Zaretskii wrote: > > From: Shane Mulligan > > Date: Wed, 19 May 2021 18:48:09 +1200 > > > > I may have resolved this issue with the following patch to > `url-retrieve-synchronously`. > > What this achieves is to trigger a `quit` in a controlled environment > rather than allowing it to occur when > > `accept-process-output` is run. > > It's not always wanted to trigger a quit when `(input-pending-p)` is > `t`. But I noticed from placing > > `while-no-input` around `accept-process-output` to avoid the `quit` tha= t > `url-retrieve-synchronously` would > > then hang but with the controlled `quit` happening beforehand, > `accept-process-output` no longer needs > > `while-no-input` around it. The end result is buttery smooth helm with > no accidental `quit` from typing too > > fast. I think this may have resulted in GUI helm faster too. > > Thanks, but what causes a quit in the first place? > --00000000000049e30e05c2ae8501 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable


Shane Mulligan

=
How to contact me:
3D""
=F0=9F=87=A6=F0=9F=87=BA00 61 421 641 250
=F0=9F= =87=B3=F0=9F=87=BF00 6= 4 21 1462 759
mullikine@gmail.com



---------- Forwarded message ------= ---
From: Shane Mulligan= <mul= likine@gmail.com>
Date: Thu, May 20, 2021 at 1:05 AM
Su= bject: Re: bug#48500: 28.0.50; url-retrieve-synchronously exits abnormally = due to pending keyboard input from terminal
To: Eli Zaretskii <eliz@gnu.org>


Hey Eli,

I'm not sure where the quit is bei= ng generated but I will look into it.

Here are my insights.

*= * Original code
https://github.com/emacs-mirror/emacs= /blob/HEAD/lisp/url/url.el

=C2=A0 292 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 ;; We used to use `sit-for' here, but in some cases i= t wouldn't
=C2=A0 293 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ;; w= ork because apparently pending keyboard input would always
=C2=A0 294 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ;; interrupt it before it got a c= hance to handle process input.
=C2=A0 295 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 ;; `sleep-for' was tried but it lead to other forms of=C2=A0 296 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ;; hanging. =C2=A0--S= tef
=C2=A0 297 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (unless (or (wi= th-local-quit
=C2=A0 298 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (accept-process-output proc 1= ))
=C2=A0 299 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 (null proc))

https://g= ithub.com/emacs-mirror/emacs/blob/HEAD/src/keyboard.c

=C2=A0 103= 95 DEFUN ("input-pending-p", Finput_pending_p, Sinput_pending_p, = 0, 1, 0,
=C2=A0 10396 =C2=A0 =C2=A0 =C2=A0 =C2=A0doc: /* Return t if com= mand input is currently available with no wait.
=C2=A0 10397 Actually, t= he value is nil only if we can be sure that no input is available;
=C2= =A0 10398 if there is a doubt, the value is t.

** I discovered that = placing while-no-input here prevented quit from generating elsewhere
But= then the overall function `url-retrieve-synchronously` would hang.

= =C2=A0 112 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (unless (or
=C2=A0 = 113 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0(while-no-input
=C2=A0 114 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(with-local-quit
=C2=A0 115= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0(accept-process-output proc 1)))
=C2=A0 116 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(null pro= c))

** Before discovering the 'fix' which is running keyboar= d-quit early (shown below), I avoided the hang by reading the key.
But r= eading and discarding the key wasn't a solution. I found that by doing = the keyboard quit shown below instead of reading the key, the
keyboard i= nput is preserved and somehow (unsure how), the pending input is pacified `= accept-process-output` is 'safe' now to run.

=C2=A0 =C2=A096= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (with-local-quit
=C2=A0 =C2= =A097 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (if (input-pending-p= )
=C2=A0 =C2=A098 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 (progn
=C2=A0 =C2=A099 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (setq counter (1+ counter))
=C2=A0 100 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ;; (a= ppend-to-file (concat (char-to-string (read-key)) "\n"))
=C2= =A0 101 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 (my-url-log (concat ">input pending" (str counter)))
= =C2=A0 102 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 (if (> counter 20)
=C2=A0 103 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (progn
=C2=A0 104 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 ;; (my-url-log (concat "QUIT" (str counter)))=C2=A0 105 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0 ;; (keyboard-quit))
=C2=A0 106 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ;; This = discards the input
=C2=A0 107 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (read-key-sequence-vector nil nil t)
= =C2=A0 108 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 (never
=C2=A0 109 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(let ((k (read-key)))
=C2= =A0 110 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0(my-url-log (concat "discarding: " (char-= to-string k)))))
=C2=A0 111 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ))))
=C2=A0 112 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 (unless (or
- 113 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(while-no-input
=C2=A0 114 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0(with-local-quit
=3D 115 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(accept-process-outp= ut proc 1)))
=C2=A0 116 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0(null procj))

** Clues

*** Back i= n 2006, it was advised in a different place to use input-pending-p instead = of sit-for.

=C2=A0 6466 2006-09-12 =C2=A0Kim F. Storm =C2=A0<storm@cua.dk>
=C2= =A0 6467
=C2=A0 6468 =C2=A0 =C2=A0 =C2=A0 =C2=A0 * simple.el (next-error= -highlight, next-error-highlight-no-select):
=C2=A0 6469 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 Fix spelling error.
=C2=A0 6470
=C2=A0 6471 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 * subr.el (sit-for): Rework to use input-pending-p and co= nd.
=C2=A0 6472 =C2=A0 =C2=A0 =C2=A0 =C2=A0 Return nil input is pending = on entry also for SECONDS <=3D 0.
=C2=A0 6473 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 (while-no-input): Use input-pending-p instead of sit-for.

***= Quitting disabled when input-pendind-p is t

https://www.gnu.org/software/emacs/manual/html_node/elisp/Idle-Timer= s.html

https://github.com/emacs-mirror/emacs/blob/567c31121fdef6bdc8b645999a6c= a1d994378c89/lisp/play/zone.el#L50

=C2=A0 49 ;; window.=C2=A0 If= the function loops, it *must* periodically check and
=C2=A0 50 ;; halt = if `input-pending-p' is t (because quitting is disabled when
=C2=A0 = 51 ;; Emacs idle timers are run).

<= div dir=3D"ltr">

Shane Mulligan

=
How to contact me:
3D""
=F0=9F=87=A6=F0=9F=87=BA00 61 421 641 250
=F0=9F= =87=B3=F0=9F=87=BF00 6= 4 21 1462 759
mullikine@gmail.com



<= div class=3D"gmail_quote">
On Wed, May= 19, 2021 at 11:57 PM Eli Zaretskii <eliz@gnu.org> wrote:
> From: Shane Mulligan <mullikine@gmail.com>
> Date: Wed, 19 May 2021 18:48:09 +1200
>
> I may have resolved this issue with the following patch to `url-retrie= ve-synchronously`.
> What this achieves is to trigger a `quit` in a controlled environment = rather than allowing it to occur when
> `accept-process-output` is run.
> It's not always wanted to trigger a quit when `(input-pending-p)` = is `t`. But I noticed from placing
> `while-no-input` around `accept-process-output` to avoid the `quit` th= at `url-retrieve-synchronously` would
> then hang but with the controlled `quit` happening beforehand, `accept= -process-output` no longer needs
> `while-no-input` around it. The end result is buttery smooth helm with= no accidental `quit` from typing too
> fast. I think this may have resulted in GUI helm faster too.

Thanks, but what causes a quit in the first place?
--00000000000049e30e05c2ae8501--