() João Távora () Fri, 11 May 2018 11:39:16 +0100 After thinking a bit about it, you're totally right, and it becomes much simpler (read below). Cool, simpler (if it still works) is better. > I suppose it's a matter of style. Maybe not, maybe [while CONDITION] is indeed more efficient, since it amounts to far fewer calls to accept-process-output. It's less efficient up until the point CONDITION is no longer satisfied (since it has to compute/check CONDITION). But past that point, it's infinitely more efficient for the reason you give. > able to play multiple games simultaneously (i.e., run > multiple independent child processes), and greedily > spinning borks that. Since from Emacs's perspective we're both blocking, you must mean that you have less CPU available for the subprocesses, right? I don't really know what i meant, actually. I think it was just my ego trying to sound bigger than my memory would permit. You will forgive the fool curmudgeon a lapse here and there, right? It's been a long time since i used the verb "bork"... /pleading The truth is that ‘gnugo--q’ is synchronous by design (it says so right in the comment about ‘:srs’, after all -- but who reads comments, anyway?!) and does indeed block (since 1st arg to ‘accept-process-output’ is specified) until input appears. That said, top-level (user interaction) control only passes to ‘gnugo--q’ via ‘run-at-time’, which normally fires after two seconds, plenty of time (even on this old computer) for Emacs to move its pointers around. Too, because the action is captured in a timer object, Emacs has even more of a free hand to diddle w/ its scheduling. To sum up, spinning is what is going on, true, but "greedily" maybe not so much. Really, it's more like bowing to the four corners of the earth (once) than spinning... > [...] seeing a skeleton of the code [...] If you haven't yet connected the dots, this is for my new mode eglot.el from the other thread. Ah OK. Sounds interesting! Since it is very new, I think I'm just going to apply your suggestion (diff below). Cool. It works fine and the code becomes tighter, though it still doesn't solve the original problem that makes the idle-timer not kick in in the meantime. (Later, I can explain more about why I need that, and how I'm working around it). OK. -- Thien-Thi Nguyen ----------------------------------------------- (defun responsep (query) (pcase (context query) (`(technical ,ml) (correctp ml)) ...)) 748E A0E8 1CB8 A748 9BFA --------------------------------------- 6CE4 6703 2224 4C80 7502